使用Python随机播放csv文件的所有行

Ros*_*rma 5 python csv random shuffle

我有一个带有数据的输入csv文件:

a   15
b   14
c   20
d   45
Run Code Online (Sandbox Code Playgroud)

我想生成一个不同的csv文件,它将包含输入文件中的完整数据行,但行应该被洗牌.

像输出文件可能包含值 -

b 14
a 15
c 20
d 45 
Run Code Online (Sandbox Code Playgroud)

我试过这段代码:

import random
import sys
op=open('random.csv','w+')
ip=open(sys.argv[1],'r')
data=ip.read()
data1=str(random.choices(data))
op.write(data1)
op.close()
Run Code Online (Sandbox Code Playgroud)

Fab*_*nna 9

另一个镜头使用pandas.您可以阅读.csv文件:

df = pd.read_csv('yourfile.csv', header=None)
Run Code Online (Sandbox Code Playgroud)

然后df.sample用来洗牌你的行.这将返回一个随机抽样的数据帧样本.使用frac=1您将整个集合视为样本:

In [18]: df
Out[18]: 
   0   1
0  a  15
1  b  14
2  c  20
3  d  45

In [19]: ds = df.sample(frac=1)

In [20]: ds
Out[20]: 
   0   1
1  b  14
3  d  45
0  a  15
2  c  20
Run Code Online (Sandbox Code Playgroud)

如果您需要再次保存新的洗牌文件,您可以:

ds.to_csv('newfile.csv')
Run Code Online (Sandbox Code Playgroud)


arm*_*ita 6

您可以使用Python random模块中的shuffle函数。像这样:

import random
fid = open("example.txt", "r")
li = fid.readlines()
fid.close()
print(li)

random.shuffle(li)
print(li)

fid = open("shuffled_example.txt", "w")
fid.writelines(li)
fid.close()
Run Code Online (Sandbox Code Playgroud)

打印命令导致:

['b 14\n', 'a 15\n', 'c 20\n', 'd 45\n']
['d 45\n', 'a 15\n', 'b 14\n', 'c 20\n']
Run Code Online (Sandbox Code Playgroud)

新文件是这样的:

d 45
a 15
b 14
c 20
Run Code Online (Sandbox Code Playgroud)

只需确保在每个原始行的末尾都有一个换行符。