python - 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()
解决方案
通常,您将一次连续读取 CSV 文件,并执行任何所需的处理(例如转换为ints
或floats
)。虽然可以将所有行作为行列表读取,每行包含一个值列表:
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 上运行相同的代码不变,您的代码将必须测试您正在运行的版本并根据版本以不同的方式打开文件。
推荐阅读
- spring-boot - LocalDateTime 的自定义 spring-kafka 反序列化器
- windows - git ssh 身份验证因 ssh_askpass 失败:posix_spawn:未知错误
- asp.net - 如何以编程方式将“包含虚拟”分配给 asp.net 下拉列表项?
- php - 嵌套 Foreach 循环从 PHP 中的多维数组构造数据列表 - 嵌套 foreach 问题仅重复第一个数组的值
- javascript - 如何进行从数组调用的正则表达式替换
- node.js - CORS 将 HTTP 请求锁定到在 Firebase 上提供的 Angular 上的 Elasticsearch 服务器
- java - Java:如何使用 JNA 执行 ldap 搜索?
- c# - 防止 Page.ClientScript.RegisterOnSubmitStatement 在每次提交时运行
- php - 如何以编程方式检查 .mp4 文件是否未损坏且未丢失电影帧或音频片段
- mysql - Laravel 上不匹配的重复行