Python 处理文件中的行时出错
Python error in processing lines from a file
使用 Sublime Text 编辑器在 windows 8.1 中编写了一个 python 脚本,我只是尝试从 OSX Yosemite 中的终端 运行 它,但我得到一个错误。
我在解析 .CSV 文件的第一行时发生错误。这是代码片段
lines 是一个数组,其中每个元素都是文件中作为字符串读取的行
我们用所需的分隔符分割字符串
我们跳过第一行,因为那是 header 信息(其他条件)
对于 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 文件中的所有行如下所示(header 行除外):
"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 机器 运行 时,它在原始文件中是 non-existent。起初我以为是文本格式,所以我将 CSV 文件保存为 UTF-8,但没有用。我尝试将制表符大小从 4 个空格更改为 8 个空格,但没有用。 运行 现在没主意了。任何帮助将不胜感激。
谢谢
"\r"
是行分隔符。 "\r\n"
也是一个行分隔符。不同平台有不同的行分隔符。
一个简单的修复:如果您自己从文件中读取 line
,那么 line.rstrip()
将从行尾删除空格。
正确的修复方法:使用 Python's standard CSV reader。它将跳过空行和注释,将正确处理引用的字符串等。
此外,在处理长列表时,停止将它们视为索引寻址 'arrays' 并使用 'stream' 或 'sequential reading' 隐喻会有所帮助。
所以处理 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
使用 Sublime Text 编辑器在 windows 8.1 中编写了一个 python 脚本,我只是尝试从 OSX Yosemite 中的终端 运行 它,但我得到一个错误。
我在解析 .CSV 文件的第一行时发生错误。这是代码片段 lines 是一个数组,其中每个元素都是文件中作为字符串读取的行 我们用所需的分隔符分割字符串 我们跳过第一行,因为那是 header 信息(其他条件) 对于 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 文件中的所有行如下所示(header 行除外):
"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 机器 运行 时,它在原始文件中是 non-existent。起初我以为是文本格式,所以我将 CSV 文件保存为 UTF-8,但没有用。我尝试将制表符大小从 4 个空格更改为 8 个空格,但没有用。 运行 现在没主意了。任何帮助将不胜感激。
谢谢
"\r"
是行分隔符。 "\r\n"
也是一个行分隔符。不同平台有不同的行分隔符。
一个简单的修复:如果您自己从文件中读取 line
,那么 line.rstrip()
将从行尾删除空格。
正确的修复方法:使用 Python's standard CSV reader。它将跳过空行和注释,将正确处理引用的字符串等。
此外,在处理长列表时,停止将它们视为索引寻址 'arrays' 并使用 'stream' 或 'sequential reading' 隐喻会有所帮助。
所以处理 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