我知道我错过了一些明显的东西。我使用argparse来解析两个输入文件。当我打印变量'file1'和'file2'时,我从主函数中得到预期的输出。然而,我试图在子函数中使用'file1'和'file2'。我也试图打印出新的变量(失败)。我想要的是将命令行参数设置为变量,然后在代码中使用这些变量。在Python中使用open()与命令行参数
"""
Created on Fri Oct 21 12:02:34 2016
@author: jsklein
"""
import pandas as pd
import csv
import argparse
# Parse command line arguments and set them to variables to be used later
def main():
parser = argparse.ArgumentParser(description='Compares Two CSV files for matches and differences indexed on a column')
parser.add_argument("-i", help="Name of first CSV import file", action="store", dest="infile1", required="yes")
parser.add_argument("-I", help="Name of second CSV import file", action="store", dest="infile2", required="yes")
args = parser.parse_args()
file1 = args.infile1
file2 = args.infile2
print(file1)
print(file2)
# Define Compare funtion that joins on specified column
def merge_csvs():
a = pd.read_csv(file1)
b = pd.read_csv(file2)
print(a)
print(b)
merged = b.merge(a, on='SWREV')
merged.to_csv("merged_results.csv", index=False)
# Define Diff function that diffs on specified column
def diff_csvs():
s = open(file1, 'r')
k = open(file2, 'r')
print(s)
print(k)
checkS = csv.reader(s)
checkK = csv.reader(k)
output1 = [row for row in checkS if row not in checkK]
output2 = [row for row in checkK if row not in checkS]
with open("A_notin_B.csv", "w") as f:
writer = csv.writer(f)
writer.writerows(output1)
with open("B_notin_A.csv", "w") as l:
writer = csv.writer(l)
writer.writerows(output2)
# Main Function that Calls all the other functions
main()
下面是运行的代码示例,请注意,其他变量“A”,“B”,“S”和“K”不打印(是我期待了很多输出:
$ python csv_compare.py -i csv1.csv -I csv2.csv
csv1.csv
csv2.csv
请给出[MCVE]包括你如何调用这个和会发生什么时你做。 – jonrsharpe
添加了修改。谢谢。 –
您不执行'merge_csvs()'和'diff_csvs()',因此无法打印。 – furas