处理fi中的行时发生Python错误

2024-06-09 02:47:32 发布

您现在位置:Python中文网/ 问答频道 /正文

在windows8.1中使用Sublime文本编辑器编写了一个python脚本,我只是尝试从osxyosemite的终端运行它,但是我得到了一个错误。你知道吗

我的错误发生在解析.CSV文件的第一行时。这是代码的一部分 lines是一个数组,其中每个元素都是作为字符串读取的文件中的行 我们用所需的分隔符分割字符串 我们跳过第一行,因为那是标题信息(else条件) 对于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个空格,但没有成功。现在没有主意了。任何帮助都将不胜感激。你知道吗

谢谢


Tags: 文件csv字符串代码元素标题错误数组
1条回答
网友
1楼 · 发布于 2024-06-09 02:47:32

"\r"是行分隔符。"\r\n"也是一个行分隔符。不同的平台有不同的行分隔符。你知道吗

一个简单的解决方法:如果您自己从文件中读取line,那么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

相关问题 更多 >