使用glob将文本文件转换为csv。需要根据正在读取的文件部分更改分隔符

时间:2015-07-06 13:52:40

标签: python parsing csv text glob

我有一个没有标准分隔符的文本文件。我需要能够检查当前行是否等于某个短语,如果是,代码应该使用某个分隔符,直到找到另一个短语。使用的分隔符是“”,“ - ”,“”和“ = ”。

请帮帮我:)

这就是我的代码目前

import csv
import glob
import os

directory = raw_input("INPUT Folder for Log Dump Files:")
output = raw_input("OUTPUT Folder for .csv files:")

txt_files = os.path.join(directory, '*.txt')

for txt_file in glob.glob(txt_files):
    with open(txt_file, "rb") as input_file:
        in_txt = csv.reader(input_file, delimiter=':')
        filename = os.path.splitext(os.path.basename(txt_file))[0] + '.csv'

    with open(os.path.join(output, filename), 'wb') as output_file:
        out_csv = csv.writer(output_file)
        out_csv.writerows(in_txt)

1 个答案:

答案 0 :(得分:0)

我不能说这种方法的时间效率,但它可能只是得到你想要的东西。基本思想是创建一个列表以包含每个文本文件的行,然后将列表输出到新的csv文件。你保存了一个'分隔符'变量,然后在浏览文本文件时通过检查每一行来更改它。

例如: 我在桌面上创建了两个文本文件。他们的内容如下:

delimiter_test_1.txt

  

test = delimiter = here

     

确实-它工作

     

我' M:加:不确定

delimiter_test_2.txt

  

此:文件:用途:冒号

     

漂亮:大部分:该:全:时间

     

确实-它工作

     

如果写入-正确-是

然后我在他们身上运行了这个脚本:

import csv
import glob
import os

directory = raw_input("INPUT Folder for Log Dump Files:")
output = raw_input("OUTPUT Folder for .csv files:")

txt_files = os.path.join(directory, '*.txt')

delimiter = ':'
for txt_file in glob.glob(txt_files):
    SavingList = []

    with open(txt_file, 'r') as text:
            for line in text:
                if line == 'test=delimiter=here\n':
                    delimiter = '='
                elif line == 'does-it-work\n':
                    delimiter = '-'
                elif line == "I'm:Not:Sure":
                    delimiter = ':'

                SavingList.append(line.split(delimiter))

    with open('%s.csv' %os.path.join(output, txt_file.split('.')[0]), 'wb') as output_file:
            writer = csv.writer(output_file)
            for m in xrange(len(SavingList)):
                writer.writerow(SavingList[m])

并获得两个csv文件,文本分割基于所需的分隔符。根据您更改分隔符的行数,您可以设置所述行的字典。然后你的支票变为:

if line in my_dictionary.keys():
    delimiter = my_dictionary[line]

例如。