用python洗牌csv的行

用python洗牌csv的行,python,csv,Python,Csv,我想简单地洗牌一个csv文件的行,但保持头静态 unshuffled.csv的内容 希望输出到shuffled.csv,如下所示 我正在使用下面的代码,这是在另一篇文章中建议的,但对我来说不起作用 from random import shuffle with open('unshuffled.csv','r') as ip: data=ip.readlines() header, rest=data[0], data[1:] shuffle(rest) with

我想简单地洗牌一个csv文件的行,但保持头静态

unshuffled.csv的内容

希望输出到shuffled.csv,如下所示

我正在使用下面的代码,这是在另一篇文章中建议的,但对我来说不起作用

from random import shuffle

with open('unshuffled.csv','r') as ip:
    data=ip.readlines()

    header, rest=data[0], data[1:]

    shuffle(rest)
with open('shuffled.csv','w') as out:
    out.write(''.join([header]+rest))
但是,输出csv会在三列之外洗牌数据,如下所示

Lastname  Firstname   Age
smith     john        18    32    kevin
taylor    bob         40

如何使列保持静态并在csv文件中洗牌行。

尝试以下操作:

from random import shuffle

with open('unshuffled.csv') as ip:
    lines=ip.readlines()
    header = lines.pop(0)
    shuffle(lines)
    lines.insert(0, header)

with open('shuffled.csv','w') as out:
    out.writelines(lines)
import random

with open('unshuffled.csv', 'r') as r, open('shuffled.csv', 'w') as w:
    data = r.readlines()
    header, rows = data[0], data[1:]
    random.shuffle(rows)
    rows = '\n'.join([row.strip() for row in rows])
    w.write(header + rows)

您必须缺少unshuffled.csv最后一行上的换行符,因此请使用如下方式:

from random import shuffle

with open('unshuffled.csv') as ip:
    lines=ip.readlines()
    header = lines.pop(0)
    shuffle(lines)
    lines.insert(0, header)

with open('shuffled.csv','w') as out:
    out.writelines(lines)
import random

with open('unshuffled.csv', 'r') as r, open('shuffled.csv', 'w') as w:
    data = r.readlines()
    header, rows = data[0], data[1:]
    random.shuffle(rows)
    rows = '\n'.join([row.strip() for row in rows])
    w.write(header + rows)

试试看。writelines[header]+Rest仍然会得到同样的结果@Netwave我的csv文件是否有问题,比如缺少回车符?您是否正在尝试按年龄对结果进行排序?如果是这样,随机洗牌不是你想要的功能want@arunkumar不,我不需要任何排序,只需要将csv的行重新排列为不同的顺序,以便第1行可以变成第3行,第2行可以变成第1行等。这些行应保持在相同的标题下,然而,目前我将行放入新列中,直到@Mohammad Umair出现同样的问题,行被洗牌,但没有保留在三个标题列中。非常感谢!是的,我怀疑它错过了某种形式的马车返回,但我想不出最好的办法强迫它!投票通过,答案被接受。