我可以想到兩種可能性。
- 您在使用Windows 2.x中,該文件包含約3倍之多 '\ r' 作爲公認的 '\ r \ n' 或 '\ n' 行結束,並EmEditor中承認 '\ r'作爲行結尾,就像Python 3.x一樣。或者在另一個操作系統上發生類似的事情。
說明:以文本模式打開文件。 3.x使用與操作系統無關的通用換行符,'\ r'和'\ r \ n'被轉換爲'\ n'。 2.x使用與操作系統相關的讀取,在Windows上只使用'\ r \ n'。
例子:
with open('tem.dat', 'wb') as f:
f.write(b'a\rb\r\nc\n\rd\n')
with open('tem.dat', 'r') as f:
for i, t in enumerate(f):
print(i, t, repr(t[-1]))
3.x的打印
0 a
'\n'
1 b
'\n'
2 c
'\n'
3
'\n'
4 d
'\n'
2.x的打印
(0, 'a\rb\n', "'\\n'")
(1, 'c\n', "'\\n'")
(2, '\rd\n', "'\\n'")
診斷:添加到您的代碼「如果fline '\ r':打印(fline)「。
- Python在文件中有一些東西被認爲是文件結束,而EmEditor卻沒有。診斷。在循環前添加'length = 0',在循環中添加'length + = len(fline)',看看它是否至少大約在之後。
什麼是「進程」功能? –
包含你的文件混合行尾('\ n','\ r','\ n \ r')? – Daniel
你能使用一個實用程序,比如'wc'來獲得另一個行數嗎?順便說一下,你可以使用'enumerate'(它會自動爲你提供索引值)壓縮你的for-loop,對於我來說,在枚舉(f)中是fline:' - 參見http://stackoverflow.com/questions/522563 /訪問最索引功能於蟒-for循環。最後,當讀取文件時,'r'是可選的 – Levon