写入文本文件时出错-必须是str,而不是lis

2024-05-28 18:13:13 发布

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

我写的一些代码有问题。基本上,当我运行代码时,我输入一个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()

感谢您的帮助。


Tags: 文件csv代码importretxtdef数字
2条回答

write调用receipt.write(cells)需要一个字符串,而您给它一个列表。

如果要将所有内容连接起来,可以使用join(在本例中,值将用破折号分隔):

receipt.write('-'.join(cells))

希望能有所帮助

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是一个包含输入文件所有行的列表,而不是一次读取一行的迭代器。第一种方法可能更好,因为它可以避免将一个大文件读入内存,只要您了解获得迭代器而不是列表意味着什么。

相关问题 更多 >

    热门问题