我有一个文本文件,其中包含以下内容:
Line 1
,
,
Line 2
,
Line 3
,
Line 4
我想创建一个删除行之间空白的功能(用标记,以示说明)
到目前为止,我已经使用以下代码创建了一个函数,但是运行此代码却没有任何反应:
with open('path/to/file.txt', 'r') as f:
for line in f:
line = line.strip()
感谢您的帮助。
答案 0 :(得分:2)
您需要在更改后覆盖文件
with open('path/to/file.txt', 'r') as f:
new_text = '\n'.join([line.strip() for line in f.read().split('\n')] if line.strip())
with open('path/to/file.txt','w') as in_file:
in_file.write(new_text)
答案 1 :(得分:2)
line.strip()
仅会删除该行 ,但这并不意味着如果该行为空,该行将以某种方式消失。此外,您永远不会真正将(已处理的)行存储在(另一个)文件中。
您可以使用以下方法处理文件并将结果写到target.txt
文件中:
with open('path/to/file.txt', 'r') as f:
with open('path/to/target.txt', 'w') as w:
for line in f:
if line.strip():
w.write(line)
如果您还想剥离非空行,因此要从所有行中删除前导和尾随空格,则可以使用已剥离的变体:
with open('path/to/file.txt', 'r') as f:
with open('path/to/target.txt', 'w') as w:
for line in f:
line = line.strip()
if line:
w.write(line)
w.write('\n')
该程序将逐行读取文件,这对于大文件通常更好,因为在内存中加载大文件可能会导致内存问题。
此外,通常最好将结果存储在另一个文件中。如果计算机在处理过程中崩溃(例如由于电源故障),则您仍然拥有原始文件。大多数Linux命令旨在写入另一个文件。这样一来,当操作完成后,您可以将目标移到原始文件。
答案 2 :(得分:1)
我会这样处理:
with open('path/to/file.txt', 'r+') as f:
lines = f.readlines()
lines = [line.strip() for line in lines]
f.writelines(line)
答案 3 :(得分:1)
您可以这样删除空行:
with open("txt.txt", "r") as f:
for l in f:
if l == "\n":
l = l.replace("\n", "")
with open("output.txt", "a") as f2:
f2.write(l)
答案 4 :(得分:1)
如果要从现有文件中删除空白行而不写入新文件,则可以以读写模式(由'r+'
表示)再次打开同一文件进行写入。写入完成后,在写入位置截断文件:
with open('file.txt') as reader, open('file.txt', 'r+') as writer:
for line in reader:
if line.strip():
writer.write(line)
writer.truncate()
答案 5 :(得分:0)
如果要从现有文件中删除空白行而不写入新文件,则可以使用随机访问。以读写二进制模式打开文件,在逐行读取时使用file.tell
方法跟踪文件的读取位置,在写入非空白行时跟踪文件的写入位置,恢复当您使用file.seek
方法进行读写时,读取和写入位置,最后,使用file.truncate
方法在最后一个写入位置截断文件:
write_position = 0
with open('file.txt', 'rb+') as f:
for line in f:
if line.strip():
read_position = f.tell()
f.seek(write_position)
f.write(line)
write_position = f.tell()
f.seek(read_position)
f.truncate(write_position)
答案 6 :(得分:-1)
> docker run -it debian:buster-slim bash
root@60a90ca657de:/# zic --version
zic (Debian GLIBC 2.28-10) 2.28
root@60a90ca657de:/# zic -b
zic: invalid option -- 'b'
zic: usage is zic [ --version ] [ --help ] [ -v ] \
[ -l localtime ] [ -p posixrules ] [ -d directory ] \
[ -L leapseconds ] [ filename ... ]
Report bugs to <http://www.debian.org/Bugs/>.