python - 控制台文本到 csv 文件 - TypeError: write() 参数必须是 str,
问题描述
非常感谢任何建议。我向控制台返回了一些文本,我想将字符串保存为 csv 文件。我尝试了几种不同的方法来保存它,但无济于事。我尝试过的其他方法之一是将输出转换为数组,但这也不起作用。如果您有关于将控制台文本返回到 csv 文件的想法,请告诉我,谢谢。
import os
from pdfminer3.layout import LAParams, LTTextBox
from pdfminer3.pdfpage import PDFPage
from pdfminer3.pdfinterp import PDFResourceManager
from pdfminer3.pdfinterp import PDFPageInterpreter
from pdfminer3.converter import TextConverter
import io
from PyPDF2 import PdfFileMerger, PdfFileReader
class Transform:
#method for extracting data and merging it into one pdf
def __init__(self):
try:
source_dir = os.getcwd()
merger = PdfFileMerger()
for item in os.listdir(source_dir):
if item.endswith("pdf"):
merger.append(item)
except Exception:
print("unable to collect")
finally:
merger.write("test.pdf")
merger.close()
#running that method extract
def extract(self):
resource_manager = PDFResourceManager()
file = io.StringIO()
converter = TextConverter(resource_manager, file, laparams=LAParams())
page_interpreter = PDFPageInterpreter(resource_manager, converter)
with open('test.pdf', 'rb') as fh:
for page in PDFPage.get_pages(fh,
caching=True,
check_extractable=True):
page_interpreter.process_page(page)
text = file.getvalue()
# close open handles
converter.close()
file.close()
return text
# def convertoarry(self, text):
# listToPrint = []
# for text in dict.keys():
# listToPrint.append(text)
# listToPrint.append(dict[text])
# stringToPrint = ",".join(listToPrint)
# return stringToPrint
#
# stringToPrint = convertoarry(self, text)
# print(stringToprint)
def modify(self, text):
words = text.split()
combine = [words.index()]
with open("text.csv", "w") as f:
f.write(combine)
f.close()
return "compeleted"
program = Transform()
print(program.modify())
解决方案
我假设你得到的错误来自这一行:
f.write(combine)
combine
是一个list
对象,而write
方法f
想要一个str
对象。这是你应该做的:
f.write(str(combine))
但是,由于您正在创建 csv,因此您可能不希望文件中出现“[”和“]”。此外,通过这样做,您还将在文件中包含“'”,这可能是您不想要的。最安全的方法是简单地迭代words
而不是创建combine
:
def modify(self, text):
words = text.split()
with open("text.csv", "w") as f:
f.write(words[0])
for word in words[1:]:
f.write(f", {word}")
f.close()
return "compeleted"
顺便说一句,如果您正在使用上下文管理器(即,如果您使用with
),则不需要显式关闭文件。因此,您可以按如下方式简化此代码:
def modify(self, text):
words = text.split()
with open("text.csv", "w") as f:
f.write(words[0])
for word in words[1:]:
f.write(f", {word}")
return "compeleted"
推荐阅读
- angular - document.referrer 不适用于 Angular 9 中的实时服务器
- c - fread 由换行符按块对齐
- forms - Drupal 8/9 模块发布后没有刷新表单数据
- c++ - 如果我想使用该结构中的字段作为参数,如何使用该结构内部的递归函数
- wpf - 在 STA Thread WPF 下运行多个 xunit 测试时出现问题
- node.js - 如何在 keycloak 中调用 create user api 后获取 userId?
- javascript - 如何在 code.org 中为提示按钮创建函数
- php - 使用 php curl 获取 twitter 中特定主题标签的计数(使用此特定主题标签创建的推文数量)
- java - 卷积内核 - 图像以镜像形式出现
- java - Galaxy S20 不调用 onSensorChanged 方法,但可以在另一台设备上运行