我的脚本会将几个文件处理成不同的路径,我想在python中以CSV格式编写这些输出。
例如:
%> script_name <file_name>
在每个文件中,我都有不同的选项需要检查。
例如:file1:
Best_friend : Riky
Mutual_friend : Anuj
Family_friend : Jamie
例如:file2:
Best_friend : Anjelina
Mutual_friend : Mythe
例如:file3:
Best_friend : Mahira
Mutual_friend : Shyna
Dear_frind : Kisty
我想以
格式创建CSVFile,Best_friend, Mutual_friend
File1,Riky,Anuj
File2,Anjelina,Mythe
File3,Mahira,shyna
请帮忙
答案 0 :(得分:1)
嗯,你的问题还有几个问题。 您希望传递多个文件,在每个文件中读取一些值,然后将值输出到csv文件中。 如果将问题分解为几个连续的步骤,它会有所帮助。
首先,您需要知道如何阅读给定文件中最好的和共同的朋友。您可以在函数中执行此操作:
def get_best_mutual(filename):
# some code
return (best_friend, mutual_friend)
然后,您可以迭代所有文件以在收集值时写入值:
for filename in list_of_filenames:
best_friend, mutual_friend = get_best_mutual(filename)
# write filename, best_friend, mutual_friend in output file
写入文件应该很容易,我不会详细介绍。 问题可能是从输入文件中实际获取值。
当您阅读文本文件时,通常会逐行阅读。然后你可以看看你的行来决定做什么:如果它定义了最好的或共同的朋友,保存定义,否则什么也不做。
具体来说,它可能看起来像:
def get_best_mutual(filename):
for line in open(filename): # read each line of the file
key, value = line.split(':', 1) # split the line along the first :
if key.startswith('Best'):
best_friend = value
if key.startswith('Mutual'):
mutual_friend = value
return (best_friend, mutual_friend)
显然,您必须保护更多代码,以防万一,例如该行没有&#39;:&#39;在其中,您可能还会注意到值以空格开头并以&#39; \ n&#39;结束:您可以使用value.strip()来解决该问题。对于key
也是如此,如果一行以空格开头,则上面的代码将无法识别它。
例如,如果文件没有best_friend,您还需要决定该怎么做。
答案 1 :(得分:0)
使用csv dictReader/dictWriter
是处理csv文件的更有效方法。
希望这能解决您的问题:
import sys
import csv
import copy
def create_csv(files):
headers= ['File', 'Best Friend', 'Mutual Friend']
list1 = []
for file in files:
with open(file,'r') as file_obj:
dict_temp = {}
dict_temp['File'] = file
for line in file_obj:
if line.split(':')[0] == 'Best_friend ':
dict_temp['Best Friend'] = line.split(':')[1].strip()
if line.split(':')[0] == 'Mutual_friend ':
dict_temp['Mutual Friend'] = line.split(':')[1].strip()
list1.append(dict_temp)
print list1
csv_result = open('result.csv','wb')
writer = csv.DictWriter(csv_result, delimiter=',', fieldnames=headers, quoting=csv.QUOTE_NONE)
writer.writeheader()
for entry in list1:
writer.writerow(entry)
csv_result.close()
if __name__ == "__main__":
create_csv(sys.argv[1:])
您只需在字典中使用适当的密钥添加/删除csv中的列。