高效地将输入文件按不同顺序重写到输出文件列表中。

问题描述 投票:0回答:1

所以这里是我要做的基本情况。

以下面的文件为例,其中包含的数字如。

begin_file

one,1
two,2
three,3
four,4
five,5

然后在每个列表中用之前的总和建立第3项。然后将顺序切换到下面的匹配。

最后的文件

  1,one,1
  2,two,3
  3,three,6
  4,four,10
  5,five,15

如何才能把数据写出来到输出文件中,如图所示,这是我下面的内容。

begin_file = open('in.dat', 'r')
final_file = open('out.dat', 'w')
total = 0
for line in begin_file:
    line = line.rstrip('\n')
    if len(line) > 0:
        li = line.split(',')
        total += int(li[1])
        final_file.write(li[1], li[0], str(total))
begin_file.close()
final_file.close()

所以出现的异常是write()或writelines()正好需要一个参数 而我给了3个。

有没有办法让输出文件以这种格式写入?还是我处理这个问题的方式不对?谢谢大家的帮助

python list indexing file-io
1个回答
0
投票

在python库中有 csv 模块来处理这种格式的文件。

如果您确实需要手动处理它,您需要在将其写入文件之前构建一个字符串,使用类似于 ','.join(li[1], li[0], str(total))'%s,%s,%d' % (li[1], li[0], total);然而,使用 csv 模块通常更好。


0
投票

考虑使用 with 语句来打开你的输入和输出流。这确保了当你处理完它们时,它们会被正确地关闭(当你的 with 块结束)。)

您可以使用 print 声明的 file 要打印到文件的参数。

with open('in.dat') as begin_file, open('out.dat', 'w') as final_file:
    total = 0
    for line in begin_file:
        line = line.rstrip('\n')
        if line:py
            li = line.split(',')
            total += int(li[1])
            print(li[1], li[0], total, file=final_file)

0
投票
begin_file = open('in.dat', 'r')
final_file = open('out.dat', 'w')
total = 0
for line in begin_file:
    line = line.rstrip('\n')
    if len(line) > 0:
        li = line.split(',')
        total += int(li[1])
        combined = [li[1], li[0], str(total)]
        complete = ', '.join(combined)
        final_file.write(complete + '\n')
begin_file.close()
print(final_file)
final_file.close()
© www.soinside.com 2019 - 2024. All rights reserved.