好的我有一个这样的文本文件:
Data1A
Data1B
Data2A
Data2B
数据1A和1B之间没有空格,而2A和2B之间没有空格,但是在1和2之间。
是否可以使用Python来读取此文本文件,并像这样排列数据
Data1A Data1B
Data2A Data2B
最好我想阅读它,对它进行排序并以CSV格式导出,但是,即使只是将它排序,因此数据部分A和B并排也是一个很大的帮助。
如果它可行,你能帮助我找到足够的教程或实现它的东西吗?
答案 0 :(得分:0)
假设这是写在文件in.txt
:
with open("fin.txt","r") as fin:
a=[]
for line in fin:
a.append(line)
b=sorted(a)
aSorted=[[b[i+1][:-1] for i in range(len(b)-1)] ]
无论输入的读取顺序如何,这都会为您提供排序列表。有几种输出数据的方法。取决于您希望代码的一般程度。一个非常简单的选择是:
with open("fou.csv","w") as fou:
for i in range(len(aSorted)//2):
fou.write("%s,\t%s\n" % (aSorted[0+i],aSorted[1+i]))
答案 1 :(得分:0)
查看itertools.groupby
:
import itertools as it
with open(fn_in, 'r') as fi, open(fn_out, 'w') as fo:
for b, lines in it.groupby(fi, key=str.strip):
if b:
fo.write(' '.join(line.strip() for line in lines) + '\n')
这适用于大型文件,因为它可以逐行排列。
它根据str.strip
(换行 - 剥离线)的结果对行进行分组,对于非空行为b = True
,对于空行为b = False
。在lines
中,您将获得属于该组的行生成器。忽略b = False
,这通常是一个单独的分隔符空行,并加入lines
b = True
。
答案 2 :(得分:0)
好吧,假设文件不是太大而且可以在内存中读取,下面的代码可以完成这项工作: -
import re
reference_dict = {}
with open("input", "r") as f:
for line in f.readlines():
line = line.strip('\n')
regex = re.compile("^Data(?P<row>[0-9]*).*$")
search_result = regex.search(line)
if search_result:
row = search_result.groupdict()['row']
if row in reference_dict:
reference_dict[row].append(line)
else:
reference_dict[row] = [line]
print reference_dict #prints {'1': ['Data1A', 'Data1B'], '2': ['Data2A', 'Data2B']}
您可以根据需要进行分组。它可以以您需要的任何方式使用。代码是自我解释的。如果您需要更多解释,请评论?