python - 写入文本文件错误 - 必须是 str,而不是列表

标签 python csv text

我在编写一些代码时遇到了问题。基本上,当我运行代码时,我输入一个 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/

相关文章:

python - 如何从 Python 中的 3D 数组中删除重复项?

javascript - Python Bokeh CustomJS RadioGroup

mysql - 如何从 MySQL 表中的多个列中获取指定最小长度的所有不同单词?

java - 如何在 JTextArea 中将文本右对齐?

CSS 布局将文本放在它旁边而不是下面

python - 使用子进程在python中执行一个linux命令,然后抓取结果提示

Python:如何删除字符串左侧第二个逗号后的所有文本

java - 如何在csv中写入冗长的数字而不转换为科学记数法

python - 如何将此字典列表转换为 csv 文件?

sql-server - 提高大型数据集的 SSIS 包插入/删除速度(或者这样可以吗?)