Python 将包含多行数据的.txt转换为.csv
我正在尝试使用Python将Python 将包含多行数据的.txt转换为.csv,python,csv,grouping,Python,Csv,Grouping,我正在尝试使用Python将.txt文件中的数据转换为.csv文件。我的.txt文件当前的格式如下: www.thing.com 事情 2010 linkedin.com/company/thing www.hello.com 你好 1999 linkedin.com/company/hello ... 我想要一个程序,它将阅读有关“东西”的4行,并将其排成一行。然后,它将读取关于“Hello”的4行,并将其排成一行,每个项目都与关于“Thing”的行位于同一列中 "www.thing.com
.txt
文件中的数据转换为.csv
文件。我的.txt
文件当前的格式如下:
www.thing.com
事情
2010
linkedin.com/company/thing
www.hello.com
你好
1999
linkedin.com/company/hello
...
我想要一个程序,它将阅读有关“东西”的4行,并将其排成一行。然后,它将读取关于“Hello”的4行,并将其排成一行,每个项目都与关于“Thing”的行位于同一列中
"www.thing.com,Thing,2010,linkedin.com/company/thing"
"www.hello.com,Hello,1999,linkedin.com/company/hello"
...
以下是我到目前为止所掌握的(不多):
到目前为止,我查找到的大多数文档都已将.txt
文档格式化为每行仅一行,但我的.txt
在多行中有一行数据
如何解决此问题?通过将输入文件迭代器压缩4次,可以将输入文件按4行分组:
from itertools import repeat
csv.writer(mycsv).writerows([[i.rstrip() for i in r] for r in zip(*repeat(text_file, 4))])
以下是解决您的问题的另一种方法:
def group_data(table, n=4):
# Group your table's data by n elements
yield from [table[k: k + n] for k in range(0, len(table), n)]
def write_csv(file_name, data):
with open(file_name, 'a') as f:
# Loop over your grouped data
for elm in data:
# Write the grouped elemenets into a file
f.write(','.join(k for k in elm) + '\n')
a = '''www.thing.com
Thing
2010
linkedin.com/company/thing
www.hello.com
Hello
1999
linkedin.com/company/hello'''
data = [elm for elm in a.split('\n')]
grouped = group_data(data)
write_csv('csv_file.csv', grouped)
输出:
www.thing.com,thing,2010,linkedin.com/company/thing
www.hello.com,你好,1999年,linkedin.com/company/hello
NB:如果您的数据不能按固定数字分组,那么您应该考虑一种新的算法来获得所需的输出。或者,您可以查看是否存在可用于进行分组的重复模式。否则,此当前代码将与您当前的文本片段一起使用。如果您不将关键部分
zip(*repeat(…)
与其他内容一起塞进一行,并添加元素zip
,repeat
,则此答案会更好,*
协同工作,一次从文件中读取行块。据我所知,这些都是非常重要的东西,可能对那些还不是Python专家的人没有帮助。
def group_data(table, n=4):
# Group your table's data by n elements
yield from [table[k: k + n] for k in range(0, len(table), n)]
def write_csv(file_name, data):
with open(file_name, 'a') as f:
# Loop over your grouped data
for elm in data:
# Write the grouped elemenets into a file
f.write(','.join(k for k in elm) + '\n')
a = '''www.thing.com
Thing
2010
linkedin.com/company/thing
www.hello.com
Hello
1999
linkedin.com/company/hello'''
data = [elm for elm in a.split('\n')]
grouped = group_data(data)
write_csv('csv_file.csv', grouped)