所以我的目标是从目录中每个文件的末尾删除所有\ 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)
所以这实际上是我想要的,但是它会在内容之下添加所有内容,而不是替换它。请问我可以得到帮助:))
答案 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()