2017-10-02 10 views
0

私がしようとしているのは、CSVの列から特定の値を読み込み、対応する行をPythonで新しいファイルに書き込むことです。 行をすべて新しい.txtファイルに書き込むことはできますが、特定の行のみを新しいファイルに書き込むことができません。行を繰り返し、特定の行条件に基づいて新しいファイルに書き込む

次のようにデータが見える:ここ

card_no items qty price 
10001  carrot 3  15.50 
10002  squash 5  12.68 
10003  pear  5  13.50 

各行上のzipファイルを読み込むコード(単一の.csvが内部に含まれている)および反復である/新しいtxtファイルに行を書き込みます。 。

import os 
import zipfile 

with open(working_directory + "crash_test.txt",'w') as ofile : 
    with zipfile.ZipFile('/Users/MikeRalston/Desktop/testArchive2.zip') as z: 
     for filename in z.namelist(): 
      if not os.path.isdir(filename): 
       with z.open(filename) as f: 
        for idx, line in enumerate(f.readlines()) : 
         ###if "card_no" == int(10001): 
          line = line.decode('UTF-8').split (",") 

          ofile.write("\t".join(line) + "\n") 

「if」ステートメントは、私がうんざりしていると信じている場所です。

+0

うん。 'if" card_no "== int(10001):' **は決して 'True' **です。 csvsを 'csv'モジュールで解析します。また、 'int(10001)'は冗長であり、 '10001'は' int'リテラルなので、常に 'int'の型になります。 –

答えて

0

あなたが個別にヘッダを読んでいないので、あなたがif "card_no" ==

を使用することはできません我々はテキストとして読み込み、ファイルから取得しているすべての行です。分割すると、カンマで区切られた列のリストが取得されます。今度は、line[0]を使用して最初の列を使用し、その値を比較に使用できます。

ここでは、line[0]の値が数字で1001に等しいことを比較しています。

###if "card_no" == int(10001):
利用には、以下の後、

OFILEニンジンの

line = line.decode('UTF-8').rstrip().split() 
if line[0].isdigit() and line[0] == '10001': 
    ofile.write("\t".join(line) + "\n") 

内容3 15.50

+0

それができました!ご協力ありがとうございました! –

関連する問題