あなたはかなり近いです。これはあなたがしなければならないすべてです:
with open(sys.argv[1]) as ifile, open(sys.argv[2], mode = 'w') as ofile:
for row in ifile:
#...
#You've defined some_condition to be met (you will have to replace this for yourself)
#E.g.: the number of entries in each row is greater than 5:
if len([term for term in row.split('#') if term.strip() != '']) > 5:
ofile.write(row)
アップデート:
行の分割に関するOPの質問に答えるには:
Python では、区切り文字を指定して行を分割します。これは CSV ファイルであるため、行を,
. 例:
これが行 (文字列) の場合:
0, 1, 2, 3, 4, 5
適用する場合:
line.split(',')
リストを取得します:
['0', '1', '2', '3', '4', '5']
更新 2:
import sys
if __name__ == '__main__':
ticker = sys.argv[3]
allTypes = bool(int(sys.argv[4])) #argv[4] is a string, you have to convert it to an int, then to a bool
with open(sys.argv[1]) as ifile, open(sys.argv[2], mode = 'w') as ofile:
all_timestamps = [] #this is an empty list
n_rows = 0
for row in ifile:
#This splits the line into constituent terms as described earlier
#SAMPLE LINE:
#A,1,12884902522,B,B,4900,AAIR,0.1046,28800,390,B,AARCA,
#After applying this bit of code, the line should be split into this:
#['A', '1', '12884902522', 'B', 'B', '4900', 'AAIR', '0.1046', '28800', '390', 'B', 'AARCA']
#NOW, you can make comparisons against those terms. :)
terms = [term for term in row.split(',') if term.strip() != '']
current_timestamp = int(terms[2])
#compare the current against the previous
#starting from row 2: (index 1)
if n_rows > 1:
#Python uses circular indices, hence: -1 means the value at the last index
#That is, the previous time_stamp. Now perform the comparison and do something if that criterion is met:
if current_timestamp - all_timestamp[-1] >= 0:
pass #the pass keyword means to do nothing. You'll have to replace it with whatever code you want
#increment n_rows every time:
n_rows += 1
#always append the current timestamp to all the time_stamps
all_timestamps.append(current_timestamp)
if (terms[6] == ticker):
# add something to make sure chronological order hasn't been broken
if (allTypes == 1):
ofile.write(row)
#I don't know if this was a bad indent of not, but you should know
#where this goes
elif (terms[0] == "A" or terms[0] == "M" or terms[0] == "D"):
print row
ofile.write(row)
私の最初の推測は正しかった。行を CSV コンポーネントに分割していませんでした。したがって、行で比較を行ったときに、正しい結果が得られませんでした。つまり、出力が得られませんでした。これで動作するはずです (目的に応じてわずかな変更を加えると)。:)