带有 glob 的文本文件到 csv。需要根据正在读取的文件部分更改分隔符

Text file to csv with glob. Need to change delimiter depending on section of file being read

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

请帮帮我 :)

这就是我目前的代码

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)

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

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

delimiter_test_1.txt

test=delimiter=here

does-it-work

I'm:Not:Sure

delimiter_test_2.txt

This:File:Uses:Colons

Pretty:Much:The:Whole:Time

does-it-work

If-Written-Correctly-yes

我然后运行他们上面的这个脚本:

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]

例如。