2

テキスト ファイルを開いて変更するスクリプトがあります。人事情報とランチアカウントの残高を含むテキストファイル。私のスクリプトは、テキスト ファイルから引用符を削除し、列 8 に値 D、F、または R を含む行のみを書き込みます。このフィルター処理されたデータを 2 つのファイルに書き込みます。別のプログラム用の lunchimport.csv という名前の csv インポート ファイルと csvさらなるフィルタリングに使用するために呼び出される一時ファイル。スクリプトの第 2 段階では、csv 一時ファイルを使用して、2 つの追加の csv ファイルを生成します。一方のファイル、negativebal.csv には、列 14 に負の値を持つ行のみが含まれます。もう一方のファイル、lowbal.cav には、列 14 に 0 から 5 の間の値を持つ行が含まれます。私の問題は、スクリプトをフィルター処理できないことです。 「間」の値を適切に。以下のコードを使用して、column14 の値が 0 から 5 の間の行を書き込むだけの場合、何も除外されません。0 から 1.99 までの値を使用すると機能します。1.99 よりも大きく、コードは何もフィルタリングしません。

if row[13] > "0" and row[13] < "1.99":
    lowwriter.writerow([row[0], row[13]])

以下にコード全体を貼り付けました。私は自分のタスクを達成するために多くの一時ファイルを使用しています。おそらくもっと良い方法がありますが、フィルターを適切に機能させることに興味があります。

import os
import csv



infile = open("\\\\comalexsrv\\export\\update.txt", "r")
outfile1 = open("casttemp1.csv", "w")
infile2 = open("casttemp1.csv", "r")
outfile2 = open("casttemp2.csv", "w")
infile3 = open("casttemp2.csv", "r")
outfile3 = open("casttemp3.csv", "w")
infile4 = open("casttemp3.csv", "r")
inowcsv = open("F:\zbennett\Lunch_Imports\lunchimport.csv", "w")
negcastcsv = open("\\\\tcdc\\inow_transfer$\\negativebal.csv", "w")
lowcastcsv = open("\\\\tcdc\\inow_transfer$\\lowbal.csv", "w")

# Remove quotes in update.txt, write to outfile1(casttemp1.csv)

string = infile.read()
outfile1.write(string.replace("\"", ''))

# Open infile2(casttemp1.csv), write rows with D,F,R in column 8 to        outfile2(casttemp2.csv)
# Open infile2(casttemp1.csv), write rows with D,F,R in column 8 to  inowcsv(F:\zbennett\Lunch_Imports\lunchimport.csv)
# Open infile2(casttemp1.csv), write rows with D,R in column 8 to  outfile3(casttemp3.csv)

tempwriter = csv.writer(outfile2, delimiter=',', lineterminator= '\n')
importwriter = csv.writer(inowcsv, delimiter=',', lineterminator= '\n')
lowtemp = csv.writer(outfile3, delimiter=',', lineterminator= '\n')

for row in csv.reader(infile2, delimiter=','):

if row[7] == "D":
    tempwriter.writerow(row)
    importwriter.writerow(row)
    lowtemp.writerow(row)
if row[7] == "F":
    tempwriter.writerow(row)
    importwriter.writerow(row)
if row[7] == "R":
    tempwriter.writerow(row)
    importwriter.writerow(row)
    lowtemp.writerow(row)



# Open infile3(casttemp2.csv), write columns 1,14 for rows with less than 0 in column 14 to negcastcsv(\\tcdc\inow_transfer$\negativebal.csv)

negwriter = csv.writer(negcastcsv, delimiter=',', lineterminator= '\n')

for row in csv.reader(infile3, delimiter=','):

if row[13] < "0":
    negwriter.writerow([row[0], row[13]])

# Open infile4(casttemp3.csv), write columns 1,14 for rows with column 14 greater than 0 and less than 1.75 to lowcastcsv(\\tcdc\inow_transfer$\lowbal.csv)

lowwriter = csv.writer(lowcastcsv, delimiter=',', lineterminator= '\n')

for row in csv.reader(infile4, delimiter=','):  

if row[13] > "0" and row[13] < "1.99":
    lowwriter.writerow([row[0], row[13]])




infile.close()
outfile1.close()
infile2.close()
outfile2.close()
inowcsv.close()
outfile3.close()
infile3.close()
infile4.close()
negcastcsv.close()
lowcastcsv.close()

# Delete casttemp1.csv file


os.remove("casttemp1.csv")
os.remove("casttemp2.csv")
os.remove("casttemp3.csv")
4

1 に答える 1

0

おそらく数値比較が必要な場合に、文字列を使用して比較が行われます。

if 0. < float(row[13]) < 1.99:
    lowwriter.writerow([row[0], row[13]])
于 2013-10-23T16:12:06.173 に答える