在此先感谢您的帮助。
我是 Python 新手,正在尝试将文件从一种格式转换为另一种格式。
这是我的代码:
fs = open('sample_data.txt','r')
fnew = open('sample_output.txt','w')
with fs as f:
while True:
line = f.readline()
if line and line[0]=='#':
print(line)
fnew.write(line + '\n')
else:
data=line.split()
fnew.write(data[0])
if not line: break
print('end of program')
fs.close
fnew.close
文件的基本格式在顶部包含注释的标题,然后是数据行。
我遇到的问题是我的 fnew.write(data[0]) 行。我收到以下错误:
IndexError:列表索引超出范围
行拆分分解了八列数据,我想删除其中的前两列。所以,最终,我想要做的是重写整个文件减去前两列。我需要做一些更复杂的重新格式化,但我希望如果我能理解这一步中的错误,我可能会弄清楚如何做剩下的。
- - - - - - - 更新
阿巴内特,你是对的。这是导致错误的换行符。但是,正如您所说,在尝试添加支票时我遇到了另一个问题。当我执行下面的代码时,一切都冻结了我。如果我删除“如果数据:”检查,那么它会运行但给我同样的“索引超出范围”错误。
我还尝试在删除“if data:”检查的情况下运行它,并使用不包含换行符的示例数据文件,它也会冻结在我身上。
任何人都可以阐明可能导致这种情况的原因吗?
fs = open('sample_data.txt','r')
fnew = open('sample_output.txt','w')
with fs as f:
while True:
line = f.readline()
for line in f:
if line[0]=='#':
print(line)
fnew.write(line + '\n')
else:
data=line.split()
if data:
print(data[0])
fnew.write(data[0] + '\n')
print('end of program')
fs.close
fnew.close
-------------- 更新 2
下面的代码有效。感谢 abarnet 澄清无限循环问题。我遇到的最后一个问题是数据的第一行,无论是换行符还是标题行都被忽略并且不会在输出中打印。
with open('sample_data.txt','r') as f, open('sample_output.txt','w') as fnew:
line = f.readline()
for line in f:
if line[0]=='#':
print(line)
fnew.write(line + '\n')
else:
data=line.split()
if data:
print(data[0])
fnew.write(data[0] + '\n')
print('end of program')
fnew.close()