在python中读取文本文件后出现奇怪的字符串行为

在python中读取文本文件后出现奇怪的字符串行为,python,text-files,Python,Text Files,我正在阅读一个文本文件,我知道它的第38行是“未校准的峰值:”,我知道它存储在我列表的第38个元素中。我已经检查过了,没有索引问题 我正在通过以下代码读取文本文件 import os fd = open('Report.txt') contents = fd.readlines() fd.close() for ind, line in enumerate(contents): line = line.split(" ") contents[ind] = line 但我们要

我正在阅读一个文本文件,我知道它的第38行是“未校准的峰值:”,我知道它存储在我列表的第38个元素中。我已经检查过了,没有索引问题

我正在通过以下代码读取文本文件

import os

fd = open('Report.txt')
contents = fd.readlines()
fd.close()

for ind, line in enumerate(contents):
    line = line.split(" ")
    contents[ind] = line
但我们要检查第38行第一个单词的长度

print len(contents[38][0])
25,我知道这个命令是针对列表中正确的元素提出来的,所以没有索引问题

print len('Uncalibrated')
十二,


!!虽然理论上他们应该是一样的。似乎每个字符在字符串向量中占据2个位置,这似乎是由于Unicoding问题

您是否尝试过
内容[37][0]
?第38行应该在索引37处,因为索引从0开始。

try

if ind == 38:
   print line
line = line.split()

确认它是您想要的线并拆分它。正如上面的海报所说,您可能也误读了这一行。

通常,如果字符串中的字符看起来“太宽”,您可能有一个unicode文件。请尝试使用


查看上面的代码,它看起来更像是一个简单的索引错误。

我希望您在问这个问题之前确实尝试过
打印内容[38][0]
。我只是写了一个数字,让那些没有完全阅读问题的人明白,我希望我在第一行中写道,我知道文本肯定位于列表的第38个元素。当你说“第38行”时,你是将第一行计算为第1行还是第0行。这些愚蠢的计算机现在从0开始,不像我们人类。我只是编辑我的问题,澄清没有索引问题,也防止(更多)否决投票!如果你想防止人们感到困惑,那么最好另外更正你用来访问相关行的索引。有些人甚至不阅读其他人的评论和回复,只是写一些答案来获取一些信息,Senderle在他的评论中正好提到了这件事!!这是不好的一面,我不同意他这么做。他说你应该调试你的代码,我完全同意他的说法。一、 另一方面,告诉您这里可能有索引问题。此外,在添加我的评论之前,我还没有看到他的评论(并不是说这会有任何区别)。['\x00U\x00n\x00c\x00a\x00l\x00i\x00b\x00r\x00a\x00t\x00e\x00d\x00','\x00P\x00e\x00a\x00k\x00s\x00:\x00\r\x00\n']你说得对,那么我如何更改或修改条目以删除这些非unicode的内容呢。您的字符串充满了空字符(\x00)。我不知道为什么,但这显然与最初编写文件的应用程序有关。字符很容易去除,但是:
nice\u string=filter(lambda x:x!='\x00',wird\u string)
实际上可以是Unicode(特别是大端UTF-16)。我想你会发现
nice\u string=wird\u string.replace(“\x00”,”)
比filter+lambda方法快8倍。kindall和lazyr,当然,你们都是对的。谢谢你的意见。
fd = open('foo.html')
contents = fd.readlines()
fd.close()

for ind, line in enumerate(contents):
    line = line.split(" ")
    contents[ind] = line

print contents,'\n\n------------------'


fd = open('foo.html')
li = fd.readlines()
fd.close()

a = map(lambda x: x.split(" "),li)
print a,'\n',a==contents,'\n\n------------------'


fd = open('foo.html')
b = [line.split(" ") for line in fd]
fd.close()

print b,'\n',b==contents