2

以下のコードをテストしましたが、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()
4

3 に答える 3

0

これだけだとは思いませんが、他の人が良い答えを出したので、最終的な絶望的な修正としてこれが必要になるかもしれません.

数週間前に同様のバグを取得し、txtファイルも操作しました。私の知る限り、特定の状況で ♥☻☺♦♣♠ などの一部の Unicode/ascii/others シンボルを txt ファイルに保存することはできません。2 つの例を示します。

1: これはクラッシュします:

printablelog = open("examplefile.txt", "a")
printablelog.write("An example ♥☻☺♣ とかちそのラヒイスハレラテ and more text")
printablelog.close()

2: これによりバイト単位で保存され、そのようにエンコードされるため、エラーは発生しません。

printablelogfixed = open("example.txt", "ab")
printablelogfixed.write(bytes("An example ♥☻☺♣ とかちそのラヒイスハレラテ and more text", 'UTF-8')) 
printablelogfixed.close()

幸運を。

于 2013-10-31T01:51:29.877 に答える
-1

書き込もうとしているオブジェクトで toString() または同様のメソッドを呼び出すだけで済みます。一部の言語では暗黙的に書き込み可能なオブジェクトに変換されますが、Python ではより明示的に変換する必要があります。

于 2013-10-31T01:04:51.150 に答える