使用python

时间:2016-06-05 22:25:39

标签: python csv

我需要使用另一个CSV文件中的部分数据动态创建.txt文件。 csv文件包含 -

  

"考克斯的巴扎尔是世界上最长的天然海滩。沙滩   在考克斯的巴扎尔是一个不间断的125公里沙滩海滩,温柔   它位于吉大港工业港口以南150公里处。

     

孙德尔本斯是一个自然区域,包括孟加拉国南部和印度西孟加拉邦的一小部分。它是世界上最大的潮汐盐生红树林单块"

我需要从这个csv创建两个文本文件。由于这两段之间有一条新线,我需要根据段落划分csv文件。如果有3个段落,则会有3个不同的.txt文件。虽然我是python的新手,但我的代码如下 -

import csv
with open('INPUT_FILE.csv') as csvfile:
    reader = csv.DictReader(csvfile)
     for row in reader:
         print(row['text'])

我知道如何检测要使用的新行if not row.strip():。但我不能在这两个代码之间做出正确的条件。或者有更好的解决方案吗?任何形式的帮助将不胜感激。我有点被困在这里。提前谢谢!

1 个答案:

答案 0 :(得分:0)

输入不是CSV(逗号分隔值)格式,而是纯文本。因此,您不必担心csv模块。

打开输入文件,读取一行,如果不是空行,打开一个outfile并将行写入。

您已经知道如何使用strip()检测空白行,因此您可以这样写:

file_count = 1
with open('INPUT_FILE.csv') as infile:
    for line in infile:
        if line.strip():
            with open('output_file_{}.txt'.format(file_count), 'w') as outfile:
                outfile.write(line)
                file_count += 1

这假定每个段落由一行组成。

另一种方法是使用itertools.groupby()。这样可以轻松处理每个段落的多行:

from itertools import groupby

file_count = 1
with open('INPUT_FILE') as infile:
    for k, lines in groupby(infile, key=lambda line: line.strip() != ''):
        if k:
            with open('output_file_{}.txt'.format(file_count), 'w') as outfile:
                outfile.writelines(lines)
            file_count += 1