【发布时间】:2025-12-10 03:00:01
【问题描述】:
如何跳过第一个标题行?我在代码的后面有重复的标题,所以我可以通过 if not l.startswith('MANDT') 但我想保留的第一个标题来消除它们。我需要如何修改代码?
keep -> MANDT|BUKRS|NETWR|UMSKS|UMSKZ|AUGDT|AUGBL|ZUONR
100|1000|23.321-|||||TEXT
100|1000|0.12|||||TEXT
100|1500|90|||||TEXT
remove -> MANDT|BUKRS|NETWR|UMSKS|UMSKZ|AUGDT|AUGBL|ZUONR
100|1000|23.321-|||||TEXT
100|1000|0.12|||||TEXT
100|1500|90|||||TEXT
remove -> MANDT|BUKRS|NETWR|UMSKS|UMSKZ|AUGDT|AUGBL|ZUONR
我正在使用的代码。
with open('yourfile.txt', 'r+') as f: # 'r+' - read/write mode
lines = f.read().splitlines()
f.seek(0) # reset file pointer
f.truncate() # truncating file contents
for l in lines:
if not l.startswith('---'):
# or f.write('|'.join(map(str.strip, l.strip('|').split('|'))) + '\n')
f.write(re.sub(r'\|\s*|\s*\|', '|', l).strip('|') + '\n')
【问题讨论】:
-
请fix your indentation。严重缩进的 Python 代码是无稽之谈。
-
你不应该在阅读的同时写在同一个文件上。
-
@JulienPalard:他不会同时读写:他首先用
read()函数读取所有内容,所以所有内容都在内存中,然后他截断文件。但是,我同意,这不是一个好习惯。 -
@LaurentLAPORTE 啊,是的,我读得太快了,跳过了查找和截断,但如果目标是将所有内容加载到内存中,第一次打开时只用“r”打开第二次会更清楚仅带有“w”。
-
阅读器设置为
__next__,可用于将迭代推进一行,跳过第一行。