2015-02-24 42 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