以不同的顺序有效地将输入文件重写为输出文件列表

Rewriting an input file to an output file list in differing order efficiently

所以这是我正在尝试做的事情的基本外观。

获取以下包含数字的文件,例如:

begin_file

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

然后用之前的总数在每个列表中创建第 3 个项目。然后切换顺序以匹配下面。

final_file

  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。

有没有办法让输出文件以这种格式写入?还是我以错误的方式解决了这个问题?感谢大家的帮助!

考虑使用 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)

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

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

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()