读取文件时出现的零(其中没有任何内容)

时间:2013-10-04 13:35:37

标签: python csv file-io encoding

在Linux上使用Python读取文件(UTF-8 Unicode文本,csv)时,使用:

  • csv.reader()
  • 文件()

某些列的值作为第一个characeter(输入中没有zeroues)得到零,其他列得到几个零,这在使用Geany或任何其他编辑器查看文件时看不到。例如:

输入

10016;9167DE1;Tom;Sawyer ;Street 22;2610;Wil;;378983561;tom@hotmail.com;1979-08-10 00:00:00.000;0;1;Wil;081208608;NULL;2;IZMH726;2010-08-30 15:02:55.777;2013-06-24 08:17:22.763;0;1;1;1;NULL

输出

10016;9167DE1;Tom;Sawyer ;Street 22;2610;Wil;;0378983561;tom@hotmail.com;1979-08-10 00:00:00.000;0;1;Wil;081208608;NULL;2;IZMH726;2010-08-30 15:02:55.777;2013-06-24 08:17:22.763;0;1;1;1;NULL

参见378983561> 0378983561 阅读:

f = file('/home/foo/data.csv', 'r')
data = f.read()
split_data = data.splitlines()
lines = list(line.split(';') for line in split_data)
print data[51220][8]
>>> '0378983561' #should have been '478983561' (reads like this in Geany etc.)

与csv.reader()相同的结果。

帮助我解开谜团,这可能是什么原因?它可能与编码/解码有关吗?

2 个答案:

答案 0 :(得分:0)

您获得的数据是一个字符串。

print data[51220][8]
>>> '0478983561'

如果要将其用作整数,则应解析它。

print int(data[51220][8])
>>> 478983561

如果您希望将其作为字符串,则应将其转换回字符串。

print repr(int(data[51220][8]))
>>> '478983561'

答案 1 :(得分:0)

csv.reader将所有列视为字符串。转换为适当的类型取决于您:

print int(data[51220][8])