CSV阅读专线问题

时间:2019-04-27 13:08:39

标签: python csv readlines

我正在尝试读取csv文件的行。 在Windows上使用readlines和csv.reader在python中读取文件的代码在Windows上工作正常,但是在Linux测试服务器上,由于每行结尾的\n,我遇到了一些问题。

在Windows和Linux上,通过python中的readlines函数读取行时是否存在某些差异?

这是我的代码:

with open(r"C:\Users\prate\Downloads\meal_count_avg_meal.csv","r") as filemy:
    #mycontent=csv.reader(filemy)
    out = filemy.readlines()

1 个答案:

答案 0 :(得分:0)

通常,您会一次连续读取CSV文件,并执行所有必需的处理(例如,转换为intsfloats)。尽管可以将所有行都读取为行列表,并且每行都包含值列表:

import csv

filename = r"C:\Users\prate\Downloads\meal_count_avg_meal.csv"

with open(filename, "rb") as file_my:
    csv_my = csv.reader(file_my)
    # next(csv_my)     # Optionally skip the header
    rows = list(csv_my)

由于您仍在使用Python 2.x,因此需要使用rb打开文件,csv.reader()对象是必需的。在Windows或Linux上,这种方法应能获得相同的结果。

rows类似于:

[["header1", "header2", "header3"], ["value1", "value2", "value3"]]

这假设您的CSV文件是标准的逗号分隔变量格式。如果您的CSV文件包含标题,并且您不希望该标题包含在rows中,则只需添加以下内容:

next(csv_my)

使用.readlines()将保留行尾(在Windows和Linux中不同)。


如果您的环境之一是Python 3.x,则需要进行如下更改:

import csv

filename = r"C:\Users\prate\Downloads\meal_count_avg_meal.csv"

with open(filename, "r", newline="") as file_my:
    csv_my = csv.reader(file_my)
    # next(csv_my)     # Optionally skip the header
    rows = list(csv_my)

如果您打算在2.x和3.x上不变地运行相同的代码,则您的代码将必须测试运行的版本,并根据版本不同地打开文件。