我知道我错过了一些明显的东西。我使用argparse来解析两个输入文件。当我打印变量' file1'时,我得到主函数的预期输出。和' file2'
但是我尝试使用' file1'和' file2'在子功能。我还尝试打印出新的变量(失败)。我想要的是将命令行参数设置为变量,然后在代码中使用这些变量。
"""
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''''''' k& #39;不打印(是的,我期待很多输出:
$ python csv_compare.py -i csv1.csv -I csv2.csv
csv1.csv
csv2.csv
答案 0 :(得分:1)
我不确定,但也许这有帮助(如果这是你想要做的):
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)
# explicitly call the other functions
merge_csvs(file1,file2)
diff_csvs(file1,file2)
# Define Compare funtion that joins on specified column
def merge_csvs(file1,file2):
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(file1,file2):
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()
基本上我做的是:
在main()方法之外定义函数
将file1和file2添加为参数
从main()调用两个函数,提供file1和file2作为每个调用的参数
上面发布的代码未经测试。我刚编辑了你的代码
答案 1 :(得分:0)
# -*- coding: utf-8 -*-
"""
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
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 fuction 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
def main():
merge_csvs()
diff_csvs()
main()
所以我摆脱了arg_parser函数,它使其他函数可用的全局变量疯狂