集中处理列表中的每个值

时间:2018-11-18 03:52:15

标签: python python-3.x list fwrite

所以我有一个包含一些文本行的文件:

here's a sentence
look! another one
here's a third one too
and another one
one more

,我有一些代码将每一行放入列表中,然后颠倒整个列表的顺序,但是现在我不知道如何将每一行写回到文件中并删除其中的现有代码文本文件。

当我运行这段代码时:

file_lines = open(file_name).readlines()
print(file_lines)
file_lines.reverse()
print(file_lines)

一切正常,并且行顺序颠倒了,但是当我运行这段代码时:

text_file = open(file_name, "w")
file_lines = open(file_name).readlines()
print(file_lines)
file_lines.reverse()
print(file_lines)
for line in file_lines:
    text_file.write(line)

由于某种原因,它会打印空白列表。

2 个答案:

答案 0 :(得分:0)

如果以'w'模式打开文件,则文件将被删除。来自docs

  

'w'仅用于写入(具有相同名称的现有文件将是   删除)

您还应该使用with关键字:

  

在处理文件时,最好使用with关键字   对象。好处是文件在其被正确关闭后   套房结束...

我建议您先读取文件内容,处理数据,然后 write

def reverseFile(file_name):
    with open(file_name, 'r') as f:
        file_lines = [line.rstrip('\n') for line in f.readlines()]
    file_lines.reverse()
    with open(file_name, "w") as f:
        for line in file_lines:
            f.write(line + '\n')

reverseFile('text_lines.txt') 

答案 1 :(得分:0)

您只需在脚本中做2个小改动就可以修复它。

  1. 使用backup[l] = array[l]; 代替int f(int n) { return n == 0 ? 0 : (n%10==2 || n%10==6) + f(n/10); }

  2. 在执行写操作之前,请将文件位置指示符放在开头

    \r+

»\w+-操作之前

text_file.seek(0)

下面是修改后的脚本,用于反转文件的内容(有效)。

rw_file.txt

»here's a sentence look! another one here's a third one too and another one one more -手术后

def reverseFile(file_name):
    text_file = open(file_name, "r+") # Do not use 'w+', it will erase your file content 
    file_lines = [line.rstrip('\n') for line in text_file.readlines()]
    file_lines.reverse()
    print(file_lines)

    text_file.seek(0) # Place file position indicator at beginning

    for line_item in file_lines:
        text_file.write(line_item+"\n")


reverseFile("rw_file.txt")