gpt4 book ai didi

python - 如何在不使用for循环的情况下搜索一个csv文件到另一个csv文件的共同记录

转载 作者:行者123 更新时间:2023-12-01 04:20:35 24 4
gpt4 key购买 nike

我想要做的是我有一个大的 .csv 文件。我想根据 BB 列中 HH 列中也包含 1 的常见记录以及 HH 列中包含 0 的所有不常见记录将这个大 csv 文件分解为许多小文件。

因此,所有文件将包含 BB 列中 HH 列中包含 1 的常见记录,以及 BB 列中没有记录且 HH 列中包含 0 的所有不常见记录。文件名应基于第 2 栏 (BB) 的通用记录。请看下面的场景。

bigFile.csv:

   AA      BB      CC       DD     EE      FF    GG      HH
12 53 115 10 3 3 186 1
12 53 01e 23 3 2 1
12 53 0ce 65 1 3 1
12 53 173 73 4 2 1
12 59 115 0 3 3 186 1
12 59 125 0 3 3 186 1
12 61 01e 23 3 2 1
12 61 b6f 0 1 1 1
12 61 b1b 0 6 5 960 1
12 68b 95 3 5 334 0
12 31a 31 2 2 0
12 221 0 4 5 0
12 12b 25 5 4 215 0
12 a10 36 5 1 0

我的预期结果文件如下:

53.csv:

   AA      BB      CC       DD     EE      FF    GG      HH
12 53 115 10 3 3 186 1
12 53 01e 23 3 2 1
12 53 0ce 65 1 3 1
12 53 173 73 4 2 1
12 68b 95 3 5 334 0
12 31a 31 2 2 0
12 221 0 4 5 0
12 12b 25 5 4 215 0
12 a10 36 5 1 0

59.csv:

   AA      BB      CC       DD     EE      FF    GG      HH
12 59 115 0 3 3 186 1
12 59 125 0 3 3 186 1
12 68b 95 3 5 334 0
12 31a 31 2 2 0
12 221 0 4 5 0
12 12b 25 5 4 215 0
12 a10 36 5 1 0

61.csv:

   AA      BB      CC       DD     EE      FF    GG      HH
12 61 01e 23 3 2 1
12 61 b6f 0 1 1 1
12 61 b1b 0 6 5 960 1
12 68b 95 3 5 334 0
12 31a 31 2 2 0
12 221 0 4 5 0
12 12b 25 5 4 215 0
12 a10 36 5 1 0

最佳答案

以下脚本将产生您预期的结果。它根据第一行的内容过滤文件:

import csv

with open('123.csv', 'r') as f_input, open('output.csv', 'w', newline='') as f_output:
csv_input = csv.reader(f_input)
csv_output = csv.writer(f_output)

header = next(csv_input)
first_row = next(csv_input)

csv_output.writerow(header)
csv_output.writerow(first_row)

for row in csv_input:
if row[0] == first_row[0]:
if row[1] == first_row[1] or row[7] == '0':
csv_output.writerow(row)

要对同一文件夹中的所有 CSV 文件执行此操作,可以使用以下命令:

import glob             
import csv
import os

file_list = glob.glob('*.csv')

output_folder = 'temp' # make sure this folder exists

for file in file_list:
file_name = os.path.join(output_folder, os.path.basename(file))
with open(file, 'r') as f_input, open(file_name, 'w', newline='') as f_output:
csv_input = csv.reader(f_input)
csv_output = csv.writer(f_output)

header = next(csv_input)
first_row = next(csv_input)

csv_output.writerow(header)
csv_output.writerow(first_row)

for row in csv_input:
if row[0] == first_row[0]:
if row[1] == first_row[1] or row[7] == '0':
csv_output.writerow(row)

这会将所有输出文件写入 temp 文件夹。

关于python - 如何在不使用for循环的情况下搜索一个csv文件到另一个csv文件的共同记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757467/

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