我正在尝试读取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()
答案 0 :(得分:0)
通常,您会一次连续读取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上不变地运行相同的代码,则您的代码将必须测试运行的版本,并根据版本不同地打开文件。