2

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

  • csv.reader()
  • 文件()

某些列的值的第一个字符为零(输入中没有零),其他列的值为零,在使用 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() 的结果相同。

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

4

2 回答 2

0

你得到的数据是一个字符串。

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

如果要将其用作整数,则应对其进行解析。

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

如果你想把它作为一个字符串,你应该把它转换回一个字符串。

print repr(int(data[51220][8]))
>>> '478983561'
于 2013-10-04T13:49:40.533 回答
0

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

print int(data[51220][8])
于 2013-10-04T13:49:58.123 回答