打印有效,写入无效。怎么会?

用户名

我已经测试了下面的代码,除第29行外,其他所有操作均与我预期的一样。final.write(invrow)实际上并未写入文件。当我使用简单的打印邀请时,它不会出现任何问题。我没有错误,这是怎么回事?我想念什么?我做错了什么?

import csv


inv = csv.DictReader(open('ireport.txt', 'rU'), dialect='excel-tab', delimiter="\t")
vbr = csv.DictReader(open('vb.txt', 'rU'), dialect='excel-tab', delimiter="\t")
mainr = csv.DictReader(open('main.txt', 'rU'), dialect='excel-tab', delimiter="\t")

final = open('ireport2.tab', 'w')

inva = []
maina = []
vba = []


for row in inv:
    inva.append(row)

for row in mainr:
    maina.append(row)

for row in vbr:
    vba.append(row)

for invrow in inva:
    for mainrow in maina:
        try:
            if invrow['\xef\xbb\xbfPART_CODE'] == mainrow['PART CODE']:
                invrow['MAINQTY'] = mainrow['ON-HAND']
                print invrow # works
                final.write(invrow) #doesn't work. Why?
        except TypeError:
            pass
        except ValueError:
            pass

final.close()
阿巴内特

print自动调用str每个参数。write才不是。

因此,如果您传递字符串,则它们都将起作用,并且实际上会做完全相同的事情。但是,如果您通过其他操作,write则会引发TypeError: expected a character buffer object

您的情况invrow是,是由返回的字典csv.DictReader那不是字符串,所以您会得到TypeError

不会出错的原因是,您正在TypeError使用该except TypeError: pass代码在代码中明确捕获并丢弃s


同时,我认为您在此处使用acsv.DictWriter来写每一行:

writer = csv.DictWriter(final, inv[0].keys())

然后:

writer.writerow(invrow)

附带说明,您可以大大简化此过程。例如,aDictReader是可迭代的;如果要列出它,只需对其进行调用list,不要一遍一遍地遍历它append像这样:

inva = list(inv)
maina = list(main)
vba = list(vb)

但是实际上,您只需要将“内部”一个更改maina为一个即可list在外部inva,您可以直接在上循环DictReader并且vba,您根本不会使用。

另外,如果使用with语句,则不需要显式的close这样做还有一个好处,就是如果您的程序在异常中退出,文件将被刷新并关闭,因此您可以看到在错误发生之前写了什么。

最后,如果要使用try/except处理异常并继续通过它们,您真的想让它打印或记录某些内容,以便您知道它发生了。实际上,我建议try您在最初的开发过程中不要做任何事情,直到您知道它适用于未损坏的文件,并且仅在开始处理损坏的文件时才添加它。

放在一起:

with open('main.txt', 'rU') as mainf:
    main = list(csv.DictReader(mainf, dialect='excel-tab', delimiter="\t")
with open('ireport.txt', 'rU') as invf, open('ireport2.tab', 'w') as finalf:
    inv = csv.DictReader(invf, dialect='excel-tab', delimiter="\t")
    final = csv.DictWriter(finalf, dialect='excel-tab', delimiter="\t",
                           fieldnames=inv.fieldnames)
    for invrow in inv:
        for mainrow in main:
            if invrow['\xef\xbb\xbfPART_CODE'] == mainrow['PART CODE']:
                invrow['MAINQTY'] = mainrow['ON-HAND']
                final.writerow(invrow)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打印有效数字,无论小数点

来自分类Dev

如何仅打印有效数字?

来自分类Dev

在Python中仅打印有效数字

来自分类Dev

打印有效,但使用回溯解决数独时返回值为None

来自分类Dev

验证电子邮件地址并在Java中打印有效的电子邮件地址

来自分类Dev

制作一个有效的密码检查器。无法让我的程序通过if条件打印有效密码

来自分类Dev

IN有效,但NOT IN无效

来自分类Dev

我怎么会空,没有抓包?

来自分类Dev

没有.aspx页后缀,怎么会这样?

来自分类Dev

有效的 xpath 无效

来自分类Dev

解构错误对象在Chrome中有效,但在Firefox中无效。该怎么办?

来自分类Dev

这怎么会造成僵局?

来自分类Dev

亡灵硬盘的奥秘。怎么会这样

来自分类Dev

我怎么会误用最接近的?

来自分类Dev

Ubuntu 18.04 怎么会突然出错

来自分类Dev

txt文件写入在模拟器中有效,但在实际设备xcode中无效

来自分类Dev

怎么可以“ + myVar;” 是有效的语法

来自分类Dev

javascript 怎么会识别出我的控件现在持有一个数组?

来自分类Dev

即使其他属性无效,Rails也会保存有效属性吗?

来自分类Dev

即使其他属性无效,Rails也会保存有效属性吗?

来自分类Dev

为什么在全局范围内打印变量有效,但对其进行修改却无效?

来自分类Dev

为什么写入文件有效,但是写入HTTP服务器请求处理程序却无效?

来自分类Dev

有效的UID对kill命令无效

来自分类Dev

有效负载无效的JSON

来自分类Dev

无效和有效区域

来自分类Dev

如果选项有效,否则,无效

来自分类Dev

$ _REQUEST有效,但$ _POST无效-

来自分类Dev

typedef有效,“使用=”无效

来自分类Dev

卷曲有效,但Python请求无效

Related 相关文章

热门标签

归档