在csv文件python中反转行的最佳方法

时间:2017-06-02 10:32:43

标签: python csv reverse

我想知道在python 2.7中反转大型csv文件(+50000行)的行的最佳方法并重写它,避免使用第一行。

input:
A;B;C
1;2;3
4;5;6

output
A;B;C
4;5;6
1;2;3

我需要知道如何在python 2.7中以有效的方式完成它。

谢谢你们,

menchopez

3 个答案:

答案 0 :(得分:2)

使用csv模块读取csv文件,并使用csv模块打开输出。现在,您正在使用list作为行。

使用next按原样编写标题行。现在消耗了第一行,将剩余的数据转换为list以完全读取并在反向列表中应用writerows

import csv

with open("in.csv") as fr, open("out.csv","wb") as fw:
    cr = csv.reader(fr,delimiter=";")
    cw = csv.writer(fw,delimiter=";")
    cw.writerow(next(cr))  # write title as-is
    cw.writerows(reversed(list(cr)))

writerows是最快的方法,因为它在脚本级别不涉及循环。

Python 3用户必须使用open("out.csv","w",newline="")来打开输出文件。

答案 1 :(得分:1)

阅读如下:

rows = []
first = True
for row in reader:
    if first:
        first = False
        first_row = row
        continue
    rows.append(row)

写如下:

rows.append(first_row)
writer.writerows(rows[::-1])

答案 2 :(得分:1)

如果您可以使用外部库,那么pandas库适用于大型文件:

import pandas as pd

# load the csv and user row 0 as headers
df = pd.read_csv("filepath.csv", header = 0)

# reverse the data
df.iloc[::-1]

如果您不能使用外部库:

import csv

with open("filepath.csv") as csvFile:
    reader = csv.reader(csvFile)


    # get data
    data = [row for row in reader]
    # get headers and remove from data
    headers = data.pop(0)

# reverse the data
data_reversed = data[::-1]

# append the reversed data to the list of headers
output_data = headers.append(data_reversed)