
使用场景: 以其中一个文件为基准(正确的值),对比两个文件中不同的行,并统计出来正确的数,错误的数 如
1.txt (基准文件) a.jpg 0 b.jpg 2 c.jpg 3 ... 2.txt a.jpg 1 b.jpg 2 c.jpg 3 ... 那么这两个文件中就 a.jpg 出错了 我的思路比较粗爆,就是拿 1 这个基准的每一行去了空格后,与 2 里边比,比中就记个数,一直把 1 中的挨个与 2 中的比一遍,但我发现这样写,每次 都要重新打开文件 2 一次,而且感觉不也靠谱,而且不知道怎么把错误的给挑出来,有什么更好的办法吗?或者是优化一下我这个
def compare(testfile, basefile): correct = 0 all = 0 with open(testfile, encoding="utf-8") as f1: for i in f1.readlines(): all += 1 with open(basefile, encoding="utf-8") as f2: for j in f2.readlines(): if i.replace(" ", "") == j.replace(" ", ""): correct += 1 else:#想把错误的输出出来,但没有输出 print(i)#想把错误的输出出来 print("样本数: %d\n 正确数: %d\n 错误数: %d\n 准确率: %f" % (all, correct, all - correct, correct / all)) if __name__ == '__main__': compare("test1.txt", "base1.txt") 1 Yourshell 2018-08-10 17:41:19 +08:00 via iPhone 在循环里别用 with 呗,直接读文件读完关掉 |
2 ivechan 2018-08-10 17:47:22 +08:00 没必要非得用 with。 |
3 fffflyfish 2018-08-10 17:53:01 +08:00 读到 numpy 或者 pandas,然后直接比对列值,很简单呀 |
4 0xLeco 2018-08-10 17:56:13 +08:00 return len(set(line.strip() for line in open(testfile)) - set(line.strip() for line in open(basefile))) |
5 imn1 2018-08-10 17:57:06 +08:00 你实际上是同行数比较吧? 这样只需要一个 for 行数 就够了 你现在是两文件每行都交叉比较,数量级是相乘 |
6 awah 2018-08-10 17:58:42 +08:00 数据量不大可以直接 set 了,再取交集吧 |
10 elsove812 2018-08-10 19:26:02 +08:00 via iPhone 分别打开前一个个文件,用前面的“ a.jpg ”、“ b.jpg ”....当作 key 后面的当作值存入字典,再打开第二个文件,逐行读入,用前一段去字典里取值,与后面的对比。 |
15 thedrwu 2018-08-10 21:53:04 +08:00 via Android sort | comm -3 | wc -l |