以CSV格式输出内容python

时间:2015-03-09 11:26:07

标签: python

我的脚本会将几个文件处理成不同的路径,我想在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

我想以

格式创建CSV
File,Best_friend, Mutual_friend
File1,Riky,Anuj
File2,Anjelina,Mythe
File3,Mahira,shyna

请帮忙

2 个答案:

答案 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中的列。