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