如何让python从我的代码输出中编写csv文件?

2024-04-24 05:39:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python非常陌生,所以我可能没有正确的术语

我使用pdfplumber从pdf中提取了文本。已保存为对象。我使用的代码是:

with pdfplumber.open('Bell_2014.pdf') as pdf:
    page = pdf.pages[0]
    bell = page.extract_text()
    print(bell)

所以“bell”是导入的PDF第一页的所有文本。 what bell looks like我需要将所有文本作为字符串写入csv。我尝试使用:

 with open('Bell_2014_ex.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(bell)

bell_ex = 'bell_2014_ex.csv'

with open(bell_ex, 'w', newline='') as csvfile:
   file_writer = csv.writer(csvfile,delimiter=',')
   file_writer.writerow(bell)

当我搜索时,我一直在寻找的是如何创建一个带有特定字符或数字的csv,而不是从已经执行的代码的输出中。例如,我可以得到上面的代码:

bell_ex = 'bell_2014_ex.csv'

with open(bell_ex, 'w', newline='') as csvfile:
   file_writer = csv.writer(csvfile,delimiter=',')
   file_writer.writerow(['bell'])

创建一个在csv的一个单元格中有“bell”的csv,但这是我能得到的最接近的结果。 我觉得这应该非常简单,但我似乎无法让它发挥作用。 有什么想法吗? 谢谢你帮助我这个没有经验的人


Tags: csvcsvfile代码文本pdfaswithnewline
3条回答

所以我的问题是,我缺少特殊字符的“encoding='utf-8'”,我的分隔符需要是空格而不是逗号。最终起作用的是:

from pdfminer.high_level import extract_text
object = extract_text('filepath.pdf')
print(object)

new_csv = 'filename.csv'

with open(new_csv, 'w', newline='', encoding = 'utf-8') as csvfile:
    file_writer = csv.writer(csvfile,delimiter=' ')
    file_writer.writerow(object)

然而,由于我的很多PDF不是真正的PDF而是扫描,csv最终有很多奇怪的符号。这在我拥有的PDF中大约有一半是有效的。如果你有真正的PDF,这将是伟大的。如果没有,我目前正试图找出如何将所有文本提取到由PDF中的标题分隔的pandas数据帧中,因为pdfminer完美地提取了所有文本。 谢谢大家的帮助

page.extract_text()定义为:“将页面的所有字符对象整理成一个字符串。”这将使bell成为一个非常长的字符串

CSVwriterow()默认情况下需要一个字符串列表,列表中的每一项对应一列

您的主要问题是类型不匹配,您试图在需要字符串列表的地方编写单个字符串。您需要进一步操作bell对象,将其转换为可接受的格式,以便写入CSV

我不知道bell包含什么或您打算写什么,我无法得到任何更具体的信息,但是关于Python的CSV模块的文档在设置分隔符、方言、列定义等方面非常全面。一旦您将bell转换成适当的字符串列表,然后可以将其写入CSV

我最近编写的一些类似代码将选项卡分隔的文件转换为csv,以便插入sqlite3数据库:

也许这有帮助:

    retval = ''
    mode = 'r'
    out_file = os.path.join('input', 'listfile.csv')

    """
    Convert tab-delimited listfile.txt to comma separated values (.csv) file
    """

    in_text = open(listfile.txt, 'r')
    in_reader = csv.reader(in_text, delimiter='\t')
    out_csv = open(out_file, 'w', newline='\n')
    out_writer = csv.writer(out_csv, dialect=csv.excel)

    for _line in in_reader:
        out_writer.writerow(_line)
    out_csv.close()

。。。就这样,不太难

相关问题 更多 >