跳过一行 - python打开
问题描述:
如何跳过第一个标题行?我在代码后面重复了标题,所以我可以通过如果不是l.startswith('MANDT')来消除它们,但是我想保留第一个标题。我需要如何修改代码?跳过一行 - python打开
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')
答
你可以试试这个:
f = [i.strip("\n") for i in open('filename.txt')]
new_file = [f[0]]+[i for i in f[1:] if i != f[0]]
答
我希望我的权利得到您的问题。你可以做这样的事情:
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
isFirstLine = True
for l in lines:
if isFirstLine:
isFirstLine = False
continue
if not l.startswith('---') and :
# or f.write('|'.join(map(str.strip, l.strip('|').split('|'))) + '\n')
f.write(re.sub(r'\|\s*|\s*\|', '|', l).strip('|') + '\n')
答
有很多方法。我可能会从一个简单的变量开始,追踪第一个标题行是否已经被看到。
expected_header = 'MANDT|BUKRS...'
with open('yourfile.txt', 'r+') as f: # 'r+' - read/write mode
# ... get lines ...
header_seen = False
for l in lines:
if l == expected_header:
if header_seen:
# do nothing, just skip to the next line in the file
continue
else:
# act on this line, but remember not to parse further headers
header_seen = True
# do something with the line here
答
可以剥去头是这样的:
from __future__ import print_function
import io
lines = f.read().splitlines()
f.seek(0)
f.truncate()
header = None
for line in lines:
if line.startswith(u"MANDT"):
if header:
continue
else:
header = line
print(line, file=f)
else:
print(line, file=f)
你得到:
MANDT|BUKRS|NETWR|UMSKS|UMSKZ|AUGDT|AUGBL|ZUONR
100|1000|23.321-|||||TEXT
100|1000|0.12|||||TEXT
100|1500|90|||||TEXT
100|1000|23.321-|||||TEXT
100|1000|0.12|||||TEXT
100|1500|90|||||TEXT
当然,你也可以使用索引简化:
for index, line in enumerate(lines):
if not index or not line.startswith(u"MANDT"):
print(line, file=f)
你会得到相同的结果。
答
如果你的座右铭是删除所有以关键字MANDT
开头的行,第一行除外,那么这将工作正常。
with open('yourfile.txt') as f:
data = f.readlines()
k = data[0]
for line in data:
if line.startswith('MANDT'):
data.remove(line)
with open('yourfile2.txt','w') as f:
f.write(k + '/n')
for line in data:
f.write(line)
+0
我需要用MANDT保留第一行。 – user2433705
+0
我知道了,请看第三行。 f.write(k +'/ n')是保持那条线。 –
请[请修复您的缩进](https://stackoverflow.com/posts/46200139/edit)。严重缩减的Python代码是无稽之谈。 – khelwood
你不应该在阅读时阅读你正在阅读的文件。 –
@JulienPalard:他不会在同一时间读写:他首先用'read()'函数读取所有内容,因此所有内容都在内存中,然后截断文件。但是,我同意,这不是一个好的做法。 –