我写的一些代码有问题。基本上,当我运行代码时,我输入一个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()
感谢您的帮助。
write
调用receipt.write(cells)
需要一个字符串,而您给它一个列表。如果要将所有内容连接起来,可以使用join(在本例中,值将用破折号分隔):
希望能有所帮助
Python文本文件的
write
方法采用字符串(str
),而不是列表。如果您想复制从输入文件到输出的匹配行,如您的描述所示,我认为您需要替换
与
或替换:
与
以及
与
第一个示例将
cells
的元素连接回一个字符串,在每个元素之间插入一个逗号。第二个表示rows
是一个包含输入文件所有行的列表,而不是一次读取一行的迭代器。第一种方法可能更好,因为它可以避免将一个大文件读入内存,只要您了解获得迭代器而不是列表意味着什么。相关问题 更多 >
编程相关推荐