Python - 将内容写入现有文件

时间:2018-05-22 11:28:51

标签: python

所以我的目标是从目录中每个文件的末尾删除所有\ n,然后附加文件。苦苦挣扎着做它的附加部分。

import os
print("Copy paste full directory path here:")
directory = input()


for filename in os.listdir(directory):
    if filename.endswith(".txt"):
        with open(os.path.join(directory, filename), "r+") as f:
            lines = f.readlines()        
            for line in lines:
                if lines[-1] in ['\n', '\r']:
                    lines = lines[:-1]
                    print(lines)     
            f.writelines(lines)

所以这实际上是我想要的,但是它会在内容之下添加所有内容,而不是替换它。请问我可以得到帮助:))

3 个答案:

答案 0 :(得分:0)

更简单的方法是使用mmap()对文件进行内存映射。这允许您将文件作为bytearray或文件进行操作。对地图所做的更改将反映在基础文件中。

您可以使用正则表达式来确定新行或回车的尾随运行的开始,然后直接覆盖该文件。

import re
from mmap import mmap

append_string = b'\nhi there\n'

with open('/tmp/hosts', "r+b") as f:
    with mmap(f.fileno(), 0) as m:
        match = re.search(rb'[\r\n]+$', m)
        append_pos = match.start() if match else m.size()
        m.resize(append_pos + len(append_string))
        m[append_pos:] = append_string

您可能实际上想要替换文件末尾的空格,例如一行可能包含空格。如果是这样,请将正则表达式模式更改为rb'\s+$'

上面的代码应该在Unix上运行。如果您使用的是其他平台,则可能需要修改对mmap()的调用。

对于较大的文件,即大于mmap()使用的页面大小的文件,您可以通过从地图末尾扫描新的线条字符来确定其中的位置,从而提高效率。要覆盖的文件。

答案 1 :(得分:-1)

寻找os.walk()和' r +'模式。

答案 2 :(得分:-1)

正如人们所指出的那样,您需要先打开文件并读取数据。然后以写入模式打开文件并将其写回。

下面的代码应该可以解决整个文件,从而消除了一些复杂的循环

import os
directory = './test'

for filename in os.listdir(directory):
    if filename.endswith(".txt"):
        clean = open(directory + "/" +filename).read().replace('\n', '')
        outfile = open(directory + "/" +filename, 'w')
        outfile.write(clean)
        outfile.close()