![](/img/trans.png)
[英]How do I print the second output without duplicating any of the first output?
[英]How do I send the output of my first operation into the input of the second?
我试图找到一种方法,可以将在crop_rows
调用的crop_rows
的输出发送到delete_Apps
直接调用的delete_Apps
的输入中,但是我不确定要喂什么。 另外,我是否需要删除:
file_obj.close()
来自crop_rows
函数,以便我的脚本继续通过这两个函数运行?
import os, csv, sys, Tkinter, tkFileDialog as fd
# stop tinker shell from opening as only needed for file dialog
root = Tkinter.Tk()
root.withdraw()
#crop_rows deletes the extra info automatically generated in the Waders report
def crop_rows(in_path):
# read file into memory
file_obj = open(in_path, 'rb')
reader = csv.reader(file_obj, delimiter='\t')
data = []
for row in reader:
if not row or not any(row):
break #stop at empty row
else:
data.append(row)
file_obj.close()
print 'Found', len(data), 'rows of data without empty lines.'
conf = raw_input('delete remaining lines? (Y|N): ').upper()[0]
if conf == 'Y':
# write data to file
file_obj = open(in_path, 'wb')
writer = csv.writer(file_obj)
writer.writerows(data)
file_obj.close
#delete_Apps deletes and leads that are currently Applicants in gHire as their Status
def delete_Apps(in_path):
# read file into memory
file_obj = open(in_path, 'rb')
reader = csv.reader(file_obj, delimiter='\t')
data = []
for row in reader:
if 'Applicant' not in row:
data.append(row)
file_obj.close()
print 'Found', len(data), 'Leads with Applicant in gHire as Status.'
conf = raw_input('delete these leads? (Y|N): ').upper()[0]
if conf == 'Y':
# write data to file
file_obj = open(in_path, 'wb')
writer = csv.writer(file_obj)
writer.writerows(data)
file_obj.close
def main():
in_path = None
prog_name = sys.argv[0]
# check if in_path are inlcuded as cmd line args...
if len(sys.argv) > 1:
in_path = sys.argv[1]
if not os.path.exists(in_path):
print 'Usage:', prog_name, '[file_path>]'
print 'cannot find the file provided for file_path:\n', in_path
sys.exit("Error - invalid excel_file_path arg")
else:
try:
# set current working directory to user's my documents folder
os.chdir(os.path.join(os.getenv('userprofile'),'documents'))
except:
pass
# ask user for path to file...
while not in_path:
print "Please select the file to read data from ..."
try:
in_path = fd.askopenfilename()
except:
print 'Error selecting file.'
if not in_path:
cont = raw_input('Do you want to continue? (Y|N): ').upper()[0]
if cont == 'N':
sys.exit("Error - unable to select input file")
crop_rows(in_path)
delete_Apps(in_path)
if __name__ == '__main__':
main()
将crop_rows更改为生成器函数(请参阅https://wiki.python.org/moin/Generators ),然后在delete_Apps中使用它。
crop_rows
,使其将行作为输入并返回新数据 delete_Apps
以接受行输入并返回修改后的数据 然后,您可以简单地嵌套对函数的调用,如下所示:
def read_input_file(in_path):
# use with not to worry about closing the file
with open(in_path, 'rb') as file_obj:
reader = csv.reader(file_obj, delimiter='\t')
return list(reader)
def crop_rows(input_rows):
data = []
for row in input_rows:
if not row or not any(row):
break #stop at empty row
else:
data.append(row)
print 'Found', len(data), 'rows of data without empty lines.'
conf = raw_input('delete remaining lines? (Y|N): ').upper()[0]
if conf == 'Y':
return data
else:
# return unmodified data
return input_rows
def delete_Apps(input_rows):
data = []
for row in input_rows:
if 'Applicant' not in row:
data.append(row)
print 'Found', len(data), 'Leads with Applicant in gHire as Status.'
conf = raw_input('delete these leads? (Y|N): ').upper()[0]
if conf == 'Y':
return data
else:
return input_rows
def write_output_file(data, out_path):
wirg open(out_path, 'wb') as file_obj:
writer = csv.writer(file_obj)
writer.writerows(data)
file_obj.close()
最后的电话:
file_path='/tmp/whatever.csv'
write_output_file(delete_Apps(crop_rows(read_input_file(file_path)), file_path)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.