我有一个像这样的csv文件:(没有标题)
aaa,1,2,3,4,5
bbb,2,3,4,5,6
ccc,3,5,7,8,5
ddd,4,6,5,8,9
我想搜索另一个csv文件:(没有标题)
bbb,1,2,3,4,5,,6,4,7
kkk,2,3,4,5,6,5,4,5,6
ccc,3,4,5,6,8,9,6,9,6
aaa,1,2,3,4,6,6,4,6,4
sss,1,2,3,4,5,3,5,3,5
并打印第一个文件中存在的第二个文件中的行(基于第一列的匹配)。结果将是:
bbb,1,2,3,4,5,,6,4,7
ccc,3,4,5,6,8,9,6,9,6
aaa,1,2,3,4,6,6,4,6,4
我有以下代码,但它不会打印任何内容:
labels = []
with open("csv1.csv", "r") as f:
f.readline()
for line in f:
labels.append((line.strip("\n")))
with open("csv2.csv", "r") as f:
f.readline()
for line in f:
if (line.split(",")[1]) in labels:
print (line)
如果可能的话,你能告诉我怎么做吗?我的代码出了什么问题?提前谢谢!
答案 0 :(得分:1)
这是一个解决方案,尽管您也可以按照建议查看特定于csv的工具和pandas:
labels = []
with open("csv1.csv", "r") as f:
lines = f.readlines()
for line in lines:
labels.append(line.split(',')[0])
with open("csv2.csv", "r") as f:
lines = f.readlines()
with open("csv_out.csv", "w") as out:
for line in lines:
temp = line.split(',')
if any(temp[0].startswith(x) for x in labels):
out.write((',').join(temp))
程序首先只收集来自csv1.csv
的标签 - 请注意您使用readline
,程序似乎希望文件中的所有行一次读取。一种方法是使用readlines
。该程序还必须从readlines
收集行 - 在此处将它们存储在名为lines
的列表中。为了收集标签,程序循环遍历每一行,用,
分割,然后将第一个元素附加到带有标签labels
的数组。
在第二部分中,程序从csv2.csv
读取所有行,同时还打开用于写入输出的文件csv.out
。它逐行处理来自csv2.csv
的行,同时将目标文件写入输出文件。
为此,程序再次按,
拆分每一行,并查看csv2
数组中是否找到labels
的标签。如果是,该行将写入csv_out.csv
。
答案 1 :(得分:0)
修改
#include <stdio.h>
void outputDate(courseInfo course);
typedef struct{
int year;
int month;
int day;
}date;
typedef struct{
double avrage;
int students;
date start;
date end;
}courseInfo;
int main(void){
courseInfo course;
course.avrage = 10;
course.students=200
course.start={17,17,17};
course.end={16,16,16};
outputDate();
return 0;
}
void outputDate(courseInfo course){
printf("avrage%d\n", course.avrage);
printf("students%d\n", course.students);
printf("start%d\n", course.start);
printf("end%d\n", course.end);
return;
}
我这样,标签只包含字符串的第一部分labels = []
with open("csv1.csv", "r") as f:
f.readline()
for line in f:
labels.append((line.split(',')[0])
with open("csv2.csv", "r") as f:
f.readline()
for line in f:
if (line.split(",")[0]) in labels:
print (line)
然后,您要检查['aaa','bbb', etc]
是否在标签中
由于您只希望根据第一列匹配它,因此您应该使用拆分,然后从分割中获取索引为0的第一个项目。