【发布时间】:2020-09-17 13:42:18
【问题描述】:
我有一个如下所示的 CSV 文件。现在它没有任何列,它包含一些我实际上不需要的字段,所以我需要根据一些条件将它写入一个新文件。
!PROJECT1, OBJECT1
2020-09-10+02:00,100,HHH,SAS,RM$20,1,1
2020-09-16+02:00,200,GGG,SAS,TAKE,2020-09-16+02:00
2020-09-13+02:00,300,TTT,SAS,TAKE,2020-09-13+02:00
2020-09-11+02:00,100,HHH,SAS,RM$20,1,1
这些是条件:
- 如果
index[4]包含单词TAKE,我只会写记录。如果是这样,请选择index[0]、[4]和[5]。 - 索引[0]和[5]需要在
YEAR、MONTH和DAY和TD中被吐出并命名。index[4]需要命名为TYPE
我希望我的新文件如下所示:
YEAR MONTH DAY TD TYPE YEAR MONTH DAY TD
2020 09 16 2 TAKE 2020 09 16 2
2020 09 13 2 TAKE 2020 09 13 2
这是我的代码:
def filter_row(r):
condition_1 = r[4] == 'TAKE' #<-- take only the TAKE's
with open(file_path, 'r') as my_file, open('outputfile.txt', 'w') as outer:
reader = csv.reader(my_file, delimiter = ',')
next(reader) #Skip the first row because it's just the header
writer = csv.writer(outer, delimiter = '\t')
for row in reader:
if filter_row(row):
writer.writerow(row)
现在我的输出文件如下所示:
2020-09-16+02:00, 200, GGG, SAS, TAKE, 2020-09-16+02:00
2020-09-13+02:00, 300, TTT, SAS, TAKE, 2020-09-13+02:00
【问题讨论】:
-
使用
pandas。容易得多。 -
@YashShah 被告知使用 CSV,因为我有超过 35000 行和超过 25 列
-
r[4] is 'TAKE'- 你应该在这里使用==而不是is。 stackoverflow.com/q/1504717/3282436 -
@0x5453 是的,我已经改了,但是其他的呢?