在Linux上使用Python读取文件(UTF-8 Unicode文本,csv)时,使用:
某些列的值作为第一个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()相同的结果。
帮助我解开谜团,这可能是什么原因?它可能与编码/解码有关吗?
答案 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])