1

私は、DBF ファイルを開く Python スクリプトに取り組んでおり、そこから内容のテキスト出力 (.txt または .csv) を作成します。

出力ファイルを書き出すことができましたが、データベース フィールドの 1 つにある空白文字を置き換える必要があります (これは英国の自動車登録番号です。たとえば、「AB09CDE」として出力するには「AB09 CDE」が必要です)。ネストされたリストのように見えるため、これを行う方法を理解できませんでした。以下のコードでは、フィールドは rec[7] です。

if __name__ == '__main__':
 import sys, csv
 from cStringIO import StringIO
 from operator import itemgetter

 # Read a database
 filename = 'DATABASE.DBF'
 if len(sys.argv) == 2:
     filename = sys.argv[1]
 f = open(filename, 'rb')
 db = list(dbfreader(f))
 f.close()
 fieldnames, fieldspecs, records = db[0], db[1], db[2:]

 # Remove some fields that we don't want to use...
 del fieldnames[0:]
 del fieldspecs[0:]
 #Put the relevant data into the temporary table
 records = [rec[7:8] + rec[9:12] + rec[3:4] for rec in records]


 # Create outputfile
 output_file = 'OUTPUT.txt'
 f = open (output_file, 'wb')
 csv.writer(f).writerows(records)

これにより、出力された各値の末尾に多くのスペースも追加されます。どうすればこれらを取り除くことができますか?

私はPythonにかなり慣れていないので、どんなガイダンスも感謝して受け取ります!

4

3 に答える 3

3

問題は、スライスを使用していることです:

>>> L = [1,2,3,4,5,6,7,8,9,10]
>>> L[7]
8
>>> L[7:8]  #NOTE: it's a *list* of a single element!
[8]

スペースを置き換えるには、次のようにrec[7]します。

records = [[rec[7].replace(' ', '')] + rec[9:12] + rec[3:4] for rec in records]
于 2013-07-15T14:39:33.897 に答える
1

Python のドキュメントには次のように書かれています: str.replace(old, new[, count]) 部分文字列 old の出現箇所をすべて new に置き換えた文字列のコピーを返します。オプションの引数 count が指定されている場合、最初の count 個の出現のみが置き換えられます。この例はそれを示しています:

In [13]: a ="AB09CDE"

In [14]: a.replace(" ", "")
Out[14]: 'AB09CDE'

In [15]: print a
AB09CDE

したがって、rec が文字列フィールドの場合、次のようになります。

records = [rec.replace(" ", "") for rec in records]
于 2013-07-15T14:58:03.400 に答える
1
 records = [rec[7].replace(' ', '') + rec[9:12] + rec[3:4] for rec in records]

?

于 2013-07-15T14:40:21.817 に答える