我试图从两个csv文件中提取列,并将所有选定的列放入一个新的csv文件中。 以下是我的原始csv文件:
文件1:
Date Time FromPool:1:Delta ToPool:1:Delta FromPool:2:Kentucky ToPool:2:Kentucky FromPool:3:MISO ToPool:3:MISO FromPool:4:MRO ToPool:4:MRO FromPool:5:NC-SC ToPool:5:NC-SC FromPool:6:NY ToPool:6:NY FromPool:7:PJM ToPool:7:PJM FromPool:8:TVA ToPool:8:TVA
20181231 1 0 0 0 0 0 0 0 0 0 0 0 1470.82 1470.82 0 0 0
20181231 2 0 0 0 0 0 0 0 0 0 0 0 1475.41 1475.41 0 0 0
20181231 3 0 0 0 0 0 0 0 0 0 0 0 1480 1480 0 0 0
20181231 4 0 27.968 0 0 27.968 0 0 0 0 0 0 1480 1480 0 0 0
20181231 5 0 96.0939 0 0 117.8839 0 0 21.79 0 0 0 1331.068 1331.068 0 0 0
20181231 6 0 134.389 0 0 358.959 0 0 224.57 0 176.872 0 1464.9179 1464.9179 0 176.872 0
20181231 7 0 291.438 30.664 0 680.182 0 0 388.744 0 1404.892 0 1437.115 1437.115 30.664 1404.892 0
20181231 8 0 89.73 0 188.531 2404.063 0 0 388.742 0 1651.703 0 1410.229 1410.229 1737.06 1651.703 0
20181231 9 0 69.205 0 5.173 1419.352 0 0 388.743 0 1229.549 0 1398.427 1398.427 956.231 1229.549 0
20181231 10 0 0 112.367 0 1146.827 0 0 388.744 0 499.606 0 1393.049 1393.049 870.45 499.606 0
20181231 11 0 0 175.866 0 658.502 0 0 388.743 0 595.023 0 1391.607 1391.607 445.625 595.023 0
20181231 12 0 0 253.185 0 388.743 0 0 388.743 0 0 0 1393.049 1393.049 253.185 0 0
20181231 13 33.122 0 331.169 0 388.743 33.122 0 388.743 0 0 0 1396.984 1396.984 331.169 0 0
20181231 14 138.976 0 428.169 0 388.743 138.976 0 388.743 0 0 0 1398.426 1398.426 428.169 0 0
20181231 15 138.513 0 519.169 0 602.173 138.513 0 388.744 0 0 0 1401.049 1401.049 732.598 0 0
20181231 16 236.296 0 601.169 0 388.743 236.296 0 388.743 0 0 0 1399.738 1399.738 601.169 0 0
20181231 17 232.315 0 608.169 0 351.52 232.315 0 351.52 0 0 0 1386.229 1386.229 608.169 0 0
20181231 18 151.122 0 520.651 0 0 257.159 0 0 0 22.9259 0 1361.311 1467.348 520.651 22.9259 0
20181231 19 455.448 0 404.21 0 0 455.448 0 0 0 709.279 0 943.671 943.671 404.21 709.279 0
20181231 20 365.492 0 381.21 0 0 503.266 0 0 0 1334.21 0 1355.392 1493.166 381.21 1334.21 0
20181231 21 257.002 0 298.71 0 225.526 257.002 0 225.526 0 1350.388 0 1376.656 1376.656 298.71 1350.388 0
20181231 22 332.8759 0 341.169 0 388.743 332.8759 0 388.743 0 779.539 0 1393.049 1393.049 341.169 779.539 0
20181231 23 0 12.976 0 0 97.5 0 0 84.524 0 0 0 1419.278 1419.278 0 0 0
20181231 24 0 0 0 0 0 0 0 0 0 0 0 1445.6389 1445.6389 0 0 0
20190101 1 0 0 0 0 0 0 0 0 0 0 0 1338.195 1338.195 0 0 0
20190101 2 0 0 0 0 0 0 0 0 0 0 0 1213.715 1213.715 0 0 0
文件2:
^{pr2}$这是我的代码,我只是不明白为什么我不能得到我想要的正确结果。在
import csv
processyear = 2019
f_r1 = open("Pool_to_Pool_Tariffs.csv")
f_r2 = open("PJM_LMP.csv")
f_w = open("Economic_interchange_process.csv","w")
f1 = csv.reader(f_r1)
f2 = csv.reader(f_r2)
next(f1)
next(f2)
for line1 in f1:
for line2 in f2:
if (line1[0].strip() == line2[0].strip()):
if (line1[1].strip() == line2[1].strip()):
if int(line2[0][:4]) == processyear:
f_w.write(line2[0]+','+line2[1]+','+line1[14]+','+line1[15]+','+line2[2]+','+line2[3]+'\n')
f_r1.close()
f_r2.close()
f_w.close()
希望你能帮助我。在
您的代码所做的就是过滤掉进程年份为2019的所有行,只将这些行写入输出文件。在
如果是这样的话,那么你可以简化你的生活,只需从你感兴趣的第一个文件中读取这些行。在
你必须先读整个文件,你不能一步一步地读这两个文件(当然你可以,但是你每次都要倒回第二个文件)。在
顺序如下:
下面是一些实现该逻辑的代码:
你在这里遇到了几个问题:
首先,你的文件不是CSV,而是制表符分隔的。所以这些线条需要改变:
第二,你只能读取这些CSV文件一次,reader对象会消耗该文件,而不会将整个内容存储在数组中。所以这个循环:
^{pr2}$它的作用是读取f1的第一行。然后它会消耗所有的f2。当你在f1上循环第二次时,f2已经是空的,所以你不能得到你期望的结果。在
以下是如何消费的演示:
注意,我运行了一次for循环,文件有27行。我重设x,再次运行文件,我有0行。为什么?这是因为f1在文件的末尾,没有其他可读取的内容。在
你应该用另一种方法重新编写这个。一种选择是将两个文件读入数据结构(如字典),然后比较字典。另一种方法是将两者放入数据库中,然后使用SQL将它们连接起来。实际上,您要做的是python代码中的关系连接。对于非常小的简单文件来说,这是可以的,但是如果您打算重用它或重复使用它,那么最好使用数据库来完成这项工作。在
相关问题 更多 >
编程相关推荐