Python仅从另一个csv文件中存在的csv文件中排除行

时间:2018-09-13 08:50:30

标签: python csv

尝试编写一个脚本,该脚本仅排除特定目录下csv文件中的行(该目录位于另一个csv文件中),然后将输出重定向到另一个csv。这类似于要应用的例外规则。

像下面这样从输入中考虑例外情况:

inDirectory/input.csv:

  Id    Name    Location    Data   Services  Action
  10    John    IN          1234   mail      active
  12    Samy    GR          5678   phone     disable
  28    Doug    UK          9123   phone     active

excDirectory/exception.csv:

  12    Samy    GR          5678   phone     disable

想要重定向输出,如下所示:

outDirectory/output.csv:

  Id    Name    Location    Data   Services  Action
  10    John    IN          1234   mail      active
  28    Doug    UK          9123   phone     active

我所能写的如下,这是不完整的,我正在寻找一种能执行相同操作的解决方案。任何想法?我对Python脚本非常陌生。

import pandas as pd

inDir = os.listdir('csv_out_tmp')
excFile = pd.read_csv('exclude/exception.csv', sep=',', index_col=0)
for csv in inDir:
  inFile = pd.read_csv('csv_out_tmp/' + csv)
  diff = set(inFile)^set(excFile)
  df[diff].to_csv('csv_out/' + csv, index=False)

我按照@neotrinity编写的另一种方式代码

inDir = os.listdir('csv_out_tmp')
excFile = 'exclude/exception.csv'
for csv in inDir:
  inFile = open('csv_out_tmp/' + csv)
  excRow = set(open(excFile))
  with open('csv_out/' + csv, 'w') as f:
    for row in open(inFile):
      if row not in excRow:
        f.write(row)

使用上面的代码,我得到的错误如下:

for row in open(inFile):
  TypeError: coercing to Unicode: need string or buffer, file found

1 个答案:

答案 0 :(得分:-1)

说实话,您不需要熊猫。

in_file = 'in.csv'
out_file = 'out.csv'
exception_file = 'exp.csv'
exception_rows = set(open(exception_file))
with open('out.csv', 'w') as f:
    for row in open('in.csv'):
        if row not in exception_rows:
            f.write(row)

这使用最少的资源。 仅将异常文件加载到内存中。

逐行遍历输入文件,并以最少的内存写入输出文件(逐行)。

之后,您可以使用熊猫进行数据分析。