在此先感謝您的幫助。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