尝试编写一个脚本,该脚本仅排除特定目录下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
答案 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)
这使用最少的资源。 仅将异常文件加载到内存中。
逐行遍历输入文件,并以最少的内存写入输出文件(逐行)。
之后,您可以使用熊猫进行数据分析。