Python 处理文件中的行时出错

标签 python csv utf

使用 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/

相关文章:

python - 将单选按钮的输入获取到变量 [Tkinter]

python - 替换列表中的每个第二个元素

python - 无法识别人脸时如何触发警告?

python - 解码 utf-16 字符串时出现问题

unicode - 什么是最好的 UTF

python - 计算销售额的滚动(滞后和超前)差异的最佳方法是什么?

php - 错误捕获 LOAD DATA LOCAL INFILE 的最佳方法?

R SVM 预测

c - 以编码中立的方式打印到终端

python - pyparsing 用分号代替逗号解析csv文件