解析并拆分.txt文件,并使用Python导出为.csv行

时间:2019-03-14 13:48:49

标签: python csv parsing text split

我有一个很大的文本文件,里面有很多笔记,我想使用Python将其拆分并分成几行。我已经使其工作了一些,但是它在.csv文件中的每个单元格中添加了一个字母,而不是整个部分。我插入了@@@字符来表示每个部分需要在哪里拆分。例如,这是我的.txt文件的样子:

@@@ jlkdlkjdlkjdalkjdalk @@@ 78278947298729874298742 @@@ llkdlaklkdalkdsa
@@@ nmczxmnczxmncz

我最终希望将其导出到.csv中,因此它看起来像这样:

ID | Reporttext

1  | jlkdlkjdlkjdalkjdalk 
2  | 78278947298729874298742 
3  | llkdlaklkdalkdsa
4  | nmczxmnczxmncz

现在,它的输出方式如下:j l k d l k(依此类推)。

这是我的代码:

import re,csv     将open(“ thetext.txt”)设置为f:         对于f中的行:             对于line.split(“ @@@”)中的单词:                  用open(r'theoutput.csv','a')作为g:                        writer = csv.writer(g)                        writer.writerow(word)                        打印(单词)

因此,重申一下,我的问题是避免出口时的间距(例如t h i s)。

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以像这样在@上进行剥离和分割,

$ cat txt2csv.py 
import csv

with open('some.txt') as file_, open('some_new.csv', 'w') as csvfile:
    lines = [x for x in file_.read().strip().split('@') if x]
    writer = csv.writer(csvfile, delimiter='|')
    writer.writerow(('ID', 'Reporttext'))
    for idx, line in enumerate(lines, 1):
        writer.writerow((idx, line.strip('@')))

输入文件,

$ cat some.txt 
@@@ jlkdlkjdlkjdalkjdalk @@@ 78278947298729874298742 @ llkdlaklkdalkdsa @@@ nmczxmnczxmncz

输出文件

$ cat some_new.csv 
ID|Reporttext
1| jlkdlkjdlkjdalkjdalk 
2| 78278947298729874298742 
3| llkdlaklkdalkdsa 
4| nmczxmnczxmncz

答案 1 :(得分:1)

首先,您应该使用一个文件打开两个文件

with open("thetext.txt") as f, open(r'theoutput.csv', 'a') as g:
import csv
with open("thetext.txt") as f, open('theoutput.csv', 'a') as g:
    lines = [x for x in f.read().strip().split('@') if x]
    writer = csv.writer(g, delimiter='|')
    writer.writerow(('ID', 'Reporttext'))
    for lineNumber, line in enumerate(lines, 1):
        writer.writerow((lineNumber, line.strip('@')))

还必须使用

lines = f.readlines()

因为现在正在发生的事情是python将txt文件当作一个大字符串对待

答案 2 :(得分:1)

类似于han solo的答案,您可以像这样进行行读取和拆分:

@@@

通过这种方式,您将逐行读取txt文件,然后在@@@处将其拆分,然后将它们逐字写入CSV文件。您甚至可以删除输入文件中的前导this.canvas = this.element.nativeElement; var ratio = Math.max(window.devicePixelRatio || 1, 1); this.canvas.width = this.canvas.width * ratio; this.canvas.height = this.canvas.height * ratio; this.canvas.getContext("2d").scale(ratio, ratio);