Python:需要类似字节的对象,而不是' str'打印时

时间:2017-04-24 08:10:49

标签: python csv export-to-csv text-mining

问题/我尝试了什么

我下载了我试图运行的textmining 1.0库,但这给了我一些导入错误(因为这是一个python 2 lib)所以我搜索了stackoverflow并发现我必须使用{{1现在一切正常。但是,当我这样做时:

2to3.py

(document_list只是def buildMatrix(self,document_list): print("building matrix...") tdm = textmining.TermDocumentMatrix() for doc in document_list: tdm.add_doc(doc) tdm.write_csv(r'path\matrix.csv', cutoff=2) 的列表) 我收到以下错误:

strings

在检查 File "C:\Users\RICK\Anaconda\lib\site-packages\textmining\__init__.py", line 335, in write_csv f.writerow(row) TypeError: a bytes-like object is required, not 'str' 的代码时,我非常确定该行应该是string。所以我想通过编辑源代码来打印这一行:

textmining 1.0

但即使是现在,我也会得到相同的f = csv.writer(open(filename, 'wb')) for row in self.rows(cutoff=cutoff): print(row) f.writerow(row)

TypeError

我搜索堆栈溢出来解决这个问题,将 File "C:\Users\RICK\Anaconda\lib\site-packages\textmining\__init__.py", line 335, in write_csv print(row) TypeError: a bytes-like object is required, not 'str' 替换为'wb',但这仍然给了我'w'

问题

  • 如何修复代码以使其能够写入行。
  • 为什么即使是print语句也会导致TypeError.

根据评论进行修改
克劳迪奥的建议仍然给了我TypeError

TypeError

托尼的建议:
代码检查:

  File "C:\Users\RICK\Anaconda\lib\site-packages\textmining\__init__.py", line 335, in write_csv
    f.write(row)

TypeError: a bytes-like object is required, not 'str'

我现在拥有这些for article in articles: abstract = searcher.getArticleAbstract(article) print(type(abstract)) #--> returns <class 'str'> all_abstracts.append(abstract) txtSearcher.buildMatrix(all_abstracts) 行:

open

正在发生一些奇怪的事情

enter image description here 这将带我去:

f = open(os.path.join(data_dir, 'stopwords.txt'),"r")
f = open(os.path.join(data_dir, 'dictionary.txt'),"r")
f = csv.writer(open(filename, 'w'))

它会打印&#34;建筑矩阵。&#34; (因此调用该函数)但是它不打印def write_csv(self, filename, cutoff=2): print("This really makes me sad!") """ Write term-document matrix to a CSV file. filename is the name of the output file (e.g. 'mymatrix.csv'). cutoff is an integer that specifies only words which appear in 'cutoff' or more documents should be written out as columns in the matrix. """ print(self.rows) f = csv.writer(open(filename, 'w')) for row in self.rows(cutoff=cutoff): f.writerow(row)

2 个答案:

答案 0 :(得分:0)

据我所知,问题的实际原因描述了程序的奇怪行为是我在评论中提出的问题:

<强> Are you sure that you are getting the error from the code you are editing?

  

不被认为是相关的,也是解释所有观察到的问题的唯一正确答案。

所有其他检测到的问题,例如

**RENAME** def write_csv(...) to for example def my_write_csv(...)

包括提供的解释和提示,如:

如果您定义一个与库中的函数同名的自己的函数,则会遇到本地/全局范围的问题,并且很难知道实际执行了哪一个?这个来自库或你已经定义的那个...你没有打印出来的print("This really makes me sad!")这个事实表明这个函数没有被执行但是库却没有...

检查整个代码,包括要读取的文件或能够重现错误的摘录 - 对这种奇怪的行为有一个非常简单的解释。

在指示错误的行之前的代码中查找未关闭的括号或字符串引号或列表]等。

在这种情况下无法取得成功......

答案 1 :(得分:0)

使用更新的textmining3软件包代替textmining 1

https://pypi.org/project/textmining3/

它将解决上述问题。