【问题标题】:Convert TXT file to CSV using Python使用 Python 将 TXT 文件转换为 CSV
【发布时间】:2017-08-16 16:32:18
【问题描述】:

我有txt 输出,我愿意将其转换为CSV

Output(data.txt)


apache_web,/my_storage/nfs/indexes,18452          
apache_web,/my_storage/nfs/indexes,0

name_of_bucket:apache_web,bucket_id:/mystorage/nfs/indexes,size:18452
name_of_bucket:apache_web,bucket_id:/mystorage/nfs/indexes,size:0

期待

name_of_bucket,bucket_id,size    
apache_web,/my_storage/nfs/indexes,18452   
apache_web,/my_storage/nfs/indexes,0

【问题讨论】:

标签: python csv


【解决方案1】:
file = open("data.txt", "r")

String = ""
for line in file:
    String += line

file.close()

file = open("data.csv", "a")
file.write(String)
file.close()

【讨论】:

  • 我得到了 txt 中的输出,它没有转换为我在问题中所期望的 CSV
【解决方案2】:

.csv 文件是由 Excel 解释为单元格的纯文本格式,因此您可以将输出写入“.csv”文件扩展名,如下所示:

with open("data.txt", "r") as f:
    content = f.readlines()

with open("data.csv", "w+") as csvfile:
    csvfile.write("name_of_bucket,bucket_id,size\n")
    csvfile.writelines(content)

【讨论】:

    【解决方案3】:

    因此,假设您有一个名为 data.txt 的输入文件,其中包含以下四行,即两种可能的格式:

    apache_web,/my_storage/nfs/indexes,18452
    apache_web,/my_storage/nfs/indexes,0
    name_of_bucket:apache_web,bucket_id:/mystorage/nfs/indexes,size:18452
    name_of_bucket:apache_web,bucket_id:/mystorage/nfs/indexes,size:0
    

    以下脚本可以读取每一行,并从每一列中删除前缀并将修改后的值写回output.csv文件:

    import csv
    
    header = ['name_of_bucket', 'bucket_id', 'size']
    
    with open('data.txt', 'rb') as f_data, open('output.csv', 'wb') as f_output:
        csv_data = csv.reader(f_data)
        csv_output = csv.writer(f_output)
        csv_output.writerow(header)
    
        for row in csv_data:
            row = [cell.replace(r + ':', '') for cell, r in zip(row, header)]
            csv_output.writerow(row) 
    

    给你一个output.csv 文件,其中包含:

    name_of_bucket,bucket_id,size
    apache_web,/my_storage/nfs/indexes,18452
    apache_web,/my_storage/nfs/indexes,0
    apache_web,/mystorage/nfs/indexes,18452
    apache_web,/mystorage/nfs/indexes,0
    

    首先,它利用 Python csv 库自动拆分每一行中的条目并制作一个值列表。接下来,它使用列表解析来删除相应的标头值(附加:)(如果存在)。接下来,它将修改后的条目列表写入新的输出文件。

    zip() 用于允许您一次从多个列表中读取一个值,在这种情况下,它从行中获取一个条目 (cell),以及它对应的标题值 (r)用于执行字符串replace() 以将文本替换为空字符串,即如果存在则将其删除。

    使用 Python 2.7.12 测试

    【讨论】: