首页 > 解决方案 > CSV readlines 问题

问题描述

我正在尝试读取 csv 文件文件的行。使用 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()

标签: pythoncsvreadlines

解决方案


通常,您将一次连续读取 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 上运行相同的代码不变,您的代码将必须测试您正在运行的版本并根据版本以不同的方式打开文件。


推荐阅读