作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要做的是我有一个大的 .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/
我是一名优秀的程序员,十分优秀!