在此先感谢您的帮助。Python - 从一个文件读取数据并选择性写入新文件
我是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:列表索引超出范围
线分割打破了数据的八列,其中我想删除了第2位。所以,最终,我想要做的是重写整个文件减去前两列。我需要做一些更复杂的重新格式化,但我希望如果我能理解这一步中的错误,我可以弄清楚如何完成剩下的工作。
--------------更新
abarnet,你说得对。这是导致错误的换行符。不过,如您所说,我在尝试添加支票时遇到了另一个问题。当我执行下面的代码时,一切都冻结在我身上。如果我删除“如果数据:”检查,然后运行,但给我相同的“索引超出范围”的错误。
我也尝试运行它,如下面的“如果数据:”检查删除,并与示例数据文件不包含换行符,它也冻结了我。
任何人都可以解释什么可能导致这种情况?
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()
尝试包故障fwrite的一个尝试,除了在不同的块体和打印数据,看看你有什么 – Dinesh 2014-12-05 22:18:24
呼叫打印您的数据变量尝试写之前。它输出什么? – 2014-12-05 22:22:30
作为一边......你可以用下面的“for fs.readlines():”代替这三行“用fs作为f:/ while True:/ line = f.readline()”。这不会解决你的问题,但它会让你的代码更好看(我的意思是更简单)。 – 2014-12-06 03:32:36