python的新手。我的一个文件夹中大约有70个CSV文件。我想比较两种格式的文件,例如 1和2,2和3、3和4 。现在,我的文件具有相同的名称,尽管它们的后缀为 rev,其编号类似于瘦的 Cars * rev1,cars_rev2,cars_rev3,cars rev4 * 。我已经试过了这段代码,但它给出了一个错误:
# your directory path here
path = r'path'
# get all files
file_, pat = [], re.compile('.csv')
for root, dirs, files in os.walk(path):
file_ = [os.path.join(root, f) for f in files if pat.search(f)]
# you may want to filter here, this line is just an example
# filter for all csv files containing 'rev'
file_ = [f for f in file_ if 'rev' in f]
temp =[]
for i in range(len(file_)-1):
file1="cars_rev{}.csv".format(str(i+1))
file2="cars_rev{}.csv".format(str(i+2))
df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)
comparison_values = df1.fillna(0).isin(df2.fillna(0))
#print (comparison_values)
rows, cols = np.where(comparison_values==False)
for item in zip(rows,cols):
# do calculation
for item in zip(rows,cols):
df1.iloc[item[0], item[1]] = '{} --> {}'.format(df1.iloc[item[0], item[1]],df2.iloc[item[0], item[1]])
#print(df1)
temp.append(df1)
有没有一种方法可以使用后缀rev1,rev2,rev3,rev4读取这些文件并成对比较两个
答案 0 :(得分:0)
使用itertools.tee()解决了以下需求:“我想以这种格式将那些文件成对比较,例如1和2、2和3、3和4。”
中提供了食谱def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
答案 1 :(得分:0)
以下是根据作者要求的bash解决方案:
$ cat compare.sh
#!/bin/bash
for ((i=1;i<=7;i++));
do
for ((j=i+1;j<=7;j++));
do
diff ./cars_rev$i.csv ./cars_rev$j.csv 1>/dev/null
printf 'diff %s %s = %s\n' cars_rev$i.csv cars_rev$j.csv $?
done
done
只需将7
更改为70
或您需要的其他任何内容...