gpt4 book ai didi

python - 从 CSV 文件中只读取一个随机行并移动到另一个 CSV

转载 作者:太空宇宙 更新时间:2023-11-04 05:21:23 24 4
gpt4 key购买 nike

在 Windows 上使用 0.18.1 pandas 和 2.7.10 Python 从大型 csv 文件读取随机行并将其移动到另一个 CSV 文件时遇到问题。

我只想将随机选择的行加载到内存中并将它们移动到另一个 CSV。我不想将第一个 CSV 的全部内容加载到内存中。

这是我使用的代码:

import random

file_size = 100
f = open("customers.csv",'r')
o = open("train_select.csv", 'w')
for i in range(0, 50):
offset = random.randrange(file_size)
f.seek(offset)
f.readline()
random_line = f.readline()
o.write(random_line)

当前输出看起来像这样:

2;flhxu-name;tum-firstname; 17520;buo-city;1966/04/24;wfyz-street;   96;GA;GEORGIA
1;jwcdf-name;fsj-firstname; 13520;oem-city;1954/02/07;amrb-street; 145;AK;ALASKA
1;jwcdf-name;fsj-firstname; 13520;oem-city;1954/02/07;amrb-street; 145;AK;ALASKA

我的问题有两个:

  1. 我还想在第二个 csv 中看到标题,而不仅仅是行。

  2. 随机函数只能选择一行。

输出应该是这样的:

id;name;firstname;zip;city;birthdate;street;housenr;stateCode;state
2;flhxu-name;tum-firstname; 17520;buo-city;1966/04/24;wfyz-street; 96;GA;GEORGIA
1;jwcdf-name;fsj-firstname; 13520;oem-city;1954/02/07;amrb-street; 145;AK;ALASKA

最佳答案

你做的比那更简单:

  1. 首先,完整阅读客户文件,title是特例,不要提及。
  2. 打乱行列表(这就是你要找的)
  3. 写回标题+乱序

代码:

import random

with open("customers.csv",'r') as f:
title = f.readline()
lines = f.readlines()

random.shuffle(lines)

with open("train_select.csv", 'w') as f:
f.write(title)
f.writelines(lines)

编辑:如果您不想将整个文件保存在内存中,这里有一个替代方案。唯一的缺点是您必须读取文件一次(但不存储在内存中)以计算行偏移量:

import random

input_file = "customers.csv"

line_offsets = list()

# just read the title
with open(input_file,'r') as f:
title = f.readline()
# store offset of the first
while True:
# store offset of the next line start
line_offsets.append(f.tell())
line = f.readline()
if line=="":
break

# now shuffle the offsets
random.shuffle(line_offsets)

# and write the output file
with open("train_select.csv", 'w') as fw:
fw.write(title)
for offset in line_offsets:
# seek to a line start
f.seek(offset)
fw.write(f.readline())

关于python - 从 CSV 文件中只读取一个随机行并移动到另一个 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40171298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com