我在编写一些代码时遇到了问题。基本上,当我运行代码时,我输入一个 8 位数字,它应该扫描 CSV 文件以查看该数字是否在文件中。如果是,则应将该行写入文本文件。但是,当我运行它并输入一个数字时,我得到了这个:
TypeError: must be str, not list
即使它是固定的,输出也是:
<_io.TextIOWrapper name='receipt.txt' mode='a' encoding='cp1252'>
我的代码如下:
import csv
import sys
import re
addItem = ""
gtinNum = ""
quantity = 0
totalPrice = 0
receipt = open("receipt.txt", "r+")
f = open("ChocolateCSV.csv", "rt")
def scanGTIN():
rows = re.split('\n', f.read())
for index, row in enumerate(rows):
global cells
cells = row.split(',')
if gtinNum in cells:
receipt.write(cells)
def gtinQuestion():
global gtinNum
gtinNum = input("Please enter the GTIN-8 Code of the product you would like to order:")
if gtinNum.isdigit() == False or len(gtinNum) != 8:
gtinQuestion()
elif gtinNum.isdigit() == True and len(gtinNum) == 8:
scanGTIN()
gtinQuestion()
最佳答案
Python 文本文件的 write
方法接受一个字符串 (str
),而不是一个列表。
如果你想将匹配的行从输入文件复制到输出,正如你的描述所暗示的,我想你要么替换你的
receipt.write(cells)
与
receipt.write(",".join(cells))
或替换:
rows = re.split('\n', f.read())
与
rows = f.readlines()
和
receipt.write(cells)
与
receipt.write(row)
第一个示例将 cells
的元素连接回一个字符串,并在每个元素之间插入一个逗号。第二个意味着 rows
是一个包含输入文件所有行的列表,而不是一次读取一行的迭代器。第一种方法可能更好,因为它避免将大文件读入内存,只要您了解获取迭代器而不是列表意味着什么。
关于python - 写入文本文件错误 - 必须是 str,而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37549498/