Python 将包含多行数据的.txt转换为.csv

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

我正在尝试使用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,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)