数据在一些csv文件中以单行写入

时间:2017-08-17 17:46:14

标签: python python-3.x csv pypdf2

我编写了一些代码来从“pdf”文件的特定页面读取数据,并使用python将其写入csv文件。它只是部分工作。但是,当将数据写入csv文件时,它会将它们写入一行而不是常规模式。我该如何修改脚本以达到目的?提前致谢。

这是我到目前为止所尝试的内容:

import csv
from PyPDF2 import PdfFileReader

outfile = open("conversion.csv",'w', newline='')
writer = csv.writer(outfile)

infile = open('some.pdf', 'rb')
reader = PdfFileReader(infile)
contents = reader.getPage(7).extractText().split('\n')
writer.writerow(contents)

print(contents)
infile.close()

pdf中的数据如下:

Creating a PivotTable Report 162
PivotCaches 165
PivotTables Collection 165
PivotFields 166
CalculatedFields 170

我在csv输出中获取数据,如:

Creating a PivotTable Report 162 PivotCaches 165 PivotTables Collection 165 PivotFields 166 CalculatedFields 170

3 个答案:

答案 0 :(得分:0)

对于此特定代码:

因为内容是项目列表[行]

contents = reader.getPage(7).extractText().split('\n')
for each in contents:
    writer.writerow(each)

print(contents)

试试这个并告诉我。

答案 1 :(得分:0)

假设你有

>>> print(s)
Line 1
Line 2
Line 3
Line 4

或该字符串的表示:

>>> s
'Line 1\nLine 2\nLine 3\nLine 4'

如果您按\n拆分,则结尾的行不再存在:

>>> s.split('\n')
['Line 1', 'Line 2', 'Line 3', 'Line 4']

因此,如果依次将每一行打印到文件中,则会得到一行:

>>> with open('/tmp/file', 'w') as f:
...    for line in s.split('\n'):
...       f.write(line)
... 
# will write 'Line 1Line 2Line 3Line 4'

因此,当您写入文件时,需要添加行结尾:

writer.writerow('\n'.join(contents)) # assuming that is a list of strings

您还应该使用上下文管理器(我上面使用的with)或关闭文件,否则您可能只会获得部分写入。

答案 2 :(得分:0)

这是我追求的解决方案:

import csv
from PyPDF2 import PdfFileReader

outfile = open("conversion.csv",'w',newline='')
writer = csv.writer(outfile)

infile = open('some.pdf', 'rb')
reader = PdfFileReader(infile)
contents = reader.getPage(15).extractText().split('\n')
for each in contents:
  writer.writerow(each.split('\n'))

infile.close()
outfile.close()

由于vintol非常接近我所寻求的输出,我将接受他的解决方案作为答案。