【问题标题】:how to filter a column in csv by a part of string and save it in excel如何通过部分字符串过滤csv中的列并将其保存在excel中
【发布时间】:2020-02-01 18:45:41
【问题描述】:

我在一个文件夹中有一个 tar 文件,里面有 CSV,没有标题。我需要在文件夹中解压缩/解压缩这些文件,提取所有 CSV,然后使用特定字符串“INCM”过滤第 12 列,然后将其保存在新的 excel 中。

我可以提取单个 tar 文件并过滤 CSV 中的数据。但是我在 untar 和 filter 任务中重新迭代相同循环的地方失败了。因此,我能够解压缩/解压缩该文件夹中的单个文件,但未能对该文件夹中的其他文件执行相同操作并将数据附加到 Excel 中。另外,我不知道如何将数据保存在 excel 中,因为我的输入来自 CSV。

import tarfile
import os
import csv

workdir = 'C:/Rajhesh/Python Exercise/OSLA/'
datadir = workdir + 'Input/'
os.chdir(datadir)
files = os.listdir(datadir)

for fname in files:
    if (fname.endswith("tar.gz")):
        tar = tarfile.open(fname, "r:gz")
        tar.extractall()
        tar.close()
    elif (fname.endswith("tar")):
        tar = tarfile.open(fname, "r:")
        tar.extractall()
        tar.close()
    column_nbr = 12
    keep = []
    with open(fname, 'r') as my_file:
        reader = csv.reader(my_file)
        for row in reader:
            print(row)
            IM = row[column_nbr]
            if "INCM" in IM:
                keep.append(row)
    with open('filtered.csv', 'w') as f:
        writer = csv.writer(f)
        writer.writerows(keep)

【问题讨论】:

    标签: python excel csv filter


    【解决方案1】:

    这适用于编写 Excel 工作表:

    import xlsxwriter
    
        workbook = xlsxwriter.Workbook('test.xlsx')
        worksheet = workbook.add_worksheet()
    
        row = 0
        column = 0
    
        keep = []
    
        for line in keep:
            line = line.split(',')  # convert each row as a list
            for cell in line: 
                worksheet.write(row, column, cell)
                column += 1  # for moving to the next cell 
            row += 1  # for moving to the next row
    
        workbook.close()
    

    【讨论】:

    • 如果您遇到任何错误,请删除 line = line.split(',') 行。
    • 谢谢罗纳克。感谢您的支持。但是,我的问题是,我的代码无法为所有 tar 文件重复“For 循环”中给出的任务。我需要对所有 tar 文件中的所有 CSV 重复这些命令,以便我可以收集那些在第 12 列中具有“INCM”字符串的记录(因为没有标题)。这些收集的记录需要保存在 Excel 中。我的输入文件是 CSV 格式的。
    • column_nbr = 12 .......................... writer.writerows(keep) 这部分代码不是这样,即使您的投诉者没有找到任何 tar 或 gz 仍然在处理该代码,所以每次它都会进入该部分代码因此,您需要将该代码保留在您的条件内。
    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多