带有 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]
例如。
我有一个没有标准分隔符的文本文件。我需要能够检查当前行是否等于某个短语,如果是,代码应该使用某个定界符直到找到另一个短语。使用的分隔符是 ',' '-',':' 和 ' ='。
请帮帮我 :)
这就是我目前的代码
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]
例如。