使用 Sublime Text 编辑器在 Windows 8.1 中编写了一个 Python 脚本,我只是尝试从 OSX Yosemite 中的终端运行它,但出现错误。
我在解析 .CSV 文件的第一行时发生错误。这是代码片段 lines 是一个数组,其中每个元素都是文件中作为字符串读取的行 我们用所需的分隔符分割字符串 我们跳过第一行,因为这是标题信息(其他条件) 对于 for 循环中的最后一个索引,i = numlines -1 = 文件中的行数 - 2 我们只对 i 的值加一,因为文件中最后一行是空白
for i in range(numlines):
if i == numlines-1:
dataF = lines[i+1].split(',')
else:
dataF = lines[i+1].split(',')
dataF1 = list(dataF[3])
del(dataF1[len(dataF1)-1])
del(dataF1[len(dataF1)-1])
del(dataF1[0])
f[i] = ''.join(dataF1)
return f
csv 文件中的所有行如下所示(标题行除外):
"08/06/2015","19:00:00","1","410"
因此,它将单行保存到一个数组中,其中每个元素对应于 CSV 文件行中以逗号分隔的 4 个值之一。然后我们取出数组中的第 3 个元素“410”,并创建一个看起来像
的列表['"','4','1','0','"','\n']
(从 Windows 运行时确实如此) 但它看起来像
['"','4','1','0','"','\r','\n']
所以当我根据上面的代码连接这个字符串时,我得到的是 410 而不是 410。
我的问题是:'\r'
术语从何而来?当由 Windows 机器运行时,它在原始文件中不存在。起初我以为是文本格式,所以我将 CSV 文件保存为 UTF-8,但这不起作用。我尝试将制表符大小从 4 个空格更改为 8 个空格,但没有成功。现在没有想法了。任何帮助将不胜感激。
谢谢
最佳答案
"\r"
是行分隔符。 "\r\n"
也是行分隔符。不同的平台有不同的行分隔符。
一个简单的修复:如果您自己从文件中读取行
,则line.rstrip()
将从行尾删除空格。
正确的修复:使用 Python's standard CSV reader 。它将跳过空行和注释,将正确处理引用的字符串等。
此外,在处理长列表时,不要将它们视为索引寻址的“数组”,而是使用“流”或“顺序读取”比喻。
因此处理 CSV 文件的典型方法如下:
import csv
with open('myfile.csv') as f:
reader = csv.reader(f)
# We assume that the file has 3 columns; adjust to taste
for (first_field, second_field, third_field) in reader:
# do something with field values of the current lines here
关于Python 处理文件中的行时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34421766/