当前位置: 首页 > 面试题库 >

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

巩才捷
2023-03-14
问题内容

我正在尝试启动并运行数据解析脚本。就数据操作而言,它起作用。我想要做的是设置此功能,以便我可以通过一个命令输入多个用户定义的CSV。

例如

> python script.py One.csv Two.csv Three.csv

如果您有关于如何自动输出CSV命名任何意见,这样,如果input = test.csvoutput = test1.csv我会很感激这一点。

得到

TypeError: coercing to Unicode: need string or buffer, list found

为线

for line in csv.reader(open(args.infile)):

我的代码:

import csv
import pprint
pp = pprint.PrettyPrinter(indent=4)
res = []

import argparse
parser = argparse.ArgumentParser()

#parser.add_argument("infile", nargs="*", type=str)
#args = parser.parse_args()

parser.add_argument ("infile", metavar="CSV", nargs="+", type=str, help="data file") 
args = parser.parse_args()


with open("out.csv","wb") as f:
    output = csv.writer(f) 
    for line in csv.reader(open(args.infile)): 
        for item in line[2:]:

            #to skip empty cells
            if not item.strip():
                continue

            item = item.split(":")
            item[1] = item[1].rstrip("%")

            print([line[1]+item[0],item[1]])
            res.append([line[1]+item[0],item[1]])
            output.writerow([line[1]+item[0],item[1].rstrip("%")])

我不太了解该错误的原因。有人可以用外行的术语解释吗?

请记住,我是一个整体的编程/ python新手,并且基本上是一个人学习,因此,如果可能的话,您可以解释出什么问题了/如何修复它,以便我加以注意以供将来参考。


问题答案:

args.infile是文件名 列表 ,而不是一个文件名。循环播放:

for filename in args.infile:
    base, ext = os.path.splitext(filename)
    with open("{}1{}".format(base, ext), "wb") as outf, open(filename, 'rb') as inf:
        output = csv.writer(outf) 
        for line in csv.reader(inf):

在这里,我曾经os.path.splitext()分割扩展名和基本文件名,以便可以生成一个新的输出文件名添加1到基本文件名。



 类似资料:
  • 问题内容: 我已经有很长时间了,但是无法解决这个错误: 渲染时捕获TypeError:强制转换为Unicode:需要字符串或缓冲区,找到NoneType 当我尝试在其中一个模型上添加或修改时,它会在管理员中发生(显示效果很好) 这是模型: 知道我在做什么错吗? 追溯: 问题答案: 当您使用的方法是返回未输入的字段时,会发生此错误。任何空白字段均为,Python无法转换,因此会出现错误。 在您的情况

  • 问题内容: 需要帮忙。有一个名为arglist的数据列表,例如:[‘dlink’,’des’,‘1210’,’c’,24] <-这就是“打印”视图。 这段代码: 它给: 怎么了? 问题答案: 当json.loads需要一个字符串时,您正在尝试加载文件对象。您可以使用 或者更好: 在第一个示例中,文件是打开的,但从未关闭(不好的做法)。在第二个示例中,上下文管理器在离开上下文块后关闭文件。

  • 问题内容: 我想使用node.js进行HTTP请求以从Web服务器加载一些文本。由于响应可能包含很多文本(有些兆字节),因此我想分别处理每个文本块。我可以使用以下代码来实现: 这似乎没有问题。但是我想支持HTTP压缩,所以我使用zlib: 这可以是像多字节字符的问题,其由两个字节组成:和。如果第一个字节被第一个块()覆盖,第二个字节被第二个块覆盖,则将在文本块的结尾/开头产生不正确的字符。如何避免

  • 我有一个node.js readstream,它发出一个缓冲区,并使用toString()函数将缓冲区转换为字符串,之后,当我试图通过JSON.parse()函数将字符串转换为JSON时,它会抛出解析错误。 有没有最好的方法将缓冲区转换为字符串,然后将字符串转换为JSON? JSON字符串如下所示, [{“data1”:1487328824948,“encrypt”:false,“version”

  • 问题内容: 我有一个包含unicode字符等的字符串,以某种方式不被我接收,但被作为接收。如何将其转换回unicode? 显然不是答案。那是什么 问题答案: Unicode转义仅适用于unicode字符串,因此 实际上是由6个字符组成的字符串:“ \”,“ u”,“ 2”,“ 0”,“ 2”,“ 6”。 要从中制作出unicode,请使用:

  • 我正在从一个字符串列表中创建一个字符串数组。到目前为止,我有以下代码: 问题是toArray()返回的是Object[],而不是String[],后者在尝试转换为String[]时产生类转换异常。除了for循环之外,有没有一种简单的方法来实现我的目标,在for循环中,我将遍历Object[],将每个对象转换为一个字符串,然后将每个字符串添加到一个String[]?对一个简单的任务来说似乎有很多工作