2015-02-24 63 views
4
with open(sourceFileName, 'rt') as sourceFile: 
    sourceFileConents = sourceFile.read() 
    sourceFileConentsLength = len(sourceFileConents) 

    i = 0 
    while i < sourceFileConentsLength: 
     print(str(i) + ' ' + sourceFileConents[i]) 
     i += 1 

請原諒unPythonic for i循環,這僅僅是測試代碼&有理由這樣做的真正的代碼的方式。文件內容如預期

Anyhoo,真正的代碼似乎比預期更快地結束循環,所以我敲了上面的虛擬模型,它刪除了真實代碼的所有邏輯。

sourceFileConentsLength報告爲13,690,但是當我打印出字符爲char的字符時,文件中仍然有幾百個字符,這些字符未被打印出來。

什麼給?

  • 我應該使用<fileHandle>.read()以外的東西來獲取文件的全部內容到單個字符串嗎?
  • 我打了一些最大的字符串長度?如果是這樣,我可以解決它嗎?
  • 如果文件在Windows中編輯&該腳本在Linux中運行(對不起,我不能發佈該文件,它是公司機密),可能是行結局
  • 還有什麼?

[更新]我認爲我們打兩個那些想法。請參閱this question

我做了一個ls -lAF到臨時目錄。只有6k +字符,但腳本交給它就好了。我應該擔心行結束嗎?如果是這樣,我能做些什麼呢?源代碼文件傾向於在Windows下運行,但該腳本只能在Linux下運行。


[Updfate ++]我改變了在Eclipse我輸入文件到Linux行的結局,但仍然得到了同樣的結果。

+1

編輯和相同的操作系統上運行它完美的作品。你可以打印'repr(sourceFileConents [i])'並判斷任何內容是否有'\ r'字符?源文件中是否有'100'行? – 2015-02-24 16:00:07

+1

您是否考慮過將'sourceFileContents'寫入一個單獨的文件,然後用'diff'來檢查這兩個文件?如果你這樣做,你看到了什麼? – 2015-02-24 16:03:40

+2

你使用什麼編碼? – Caramiriel 2015-02-24 16:04:45

回答

1

如果你的文件是在像UTF-8編碼,你應該把它計算字符之前解碼:

sourceFileContents_utf8 = open(sourceFileName, 'r+').read() 
sourceFileContents_unicode = sourceFileContents_utf8.decode('utf8') 
print(len(sourceFileContents_unicode)) 

i = 0 
source_file_contents_length = len(sourceFileContents_unicode) 
while i < source_file_contents_length: 
    print('%s %s' % (str(i), sourceFileContents[i])) 
    i += 1 
+0

我做錯了什麼?Python v3.2.3例外:sourceFileContents_unicode = sourceFileContents_utf8.decode(\'utf8 \')\ n',「AttributeError:'str'對象沒有屬性'解碼' – Mawg 2015-02-25 08:06:05

+0

https://docs.python.org/2/howto/unicode.html – 2015-02-25 15:02:34

2

如果您在文本模式下閱讀文件,它會自動將行結尾轉換爲\r\n\n

使用

with open(sourceFileName, newline='') as sourceFile: 

而是試圖;這將關閉換行翻譯(\r\n將作爲\r\n返回)。

+0

一個很好的理論。唉,它沒有幫助:-( – Mawg 2015-02-25 07:58:35