我有很多來自傳感器的實時資料。目前,我將資料存盤在 csv 檔案中,如下所示:
0 2 1 437 464 385 171 0:44:4 dog.jpg
1 1 3 452 254 444 525 0:56:2 cat.jpg
2 3 2 552 525 785 522 0:52:8 car.jpg
3 8 4 552 525 233 555 0:52:8 car.jpg
4 7 5 552 525 433 522 1:52:8 phone.jpg
5 9 3 552 525 555 522 1:52:8 car.jpg
6 6 6 444 392 111 232 1:43:4 dog.jpg
7 1 1 234 322 191 112 1:43:4 dog.jpg
.
.
. .
第三列的數字介于 1 到 6 之間。我想讀取第三列中編號為 2 和 5 的所有行的第 4 列和第 5 列的資訊。我還想每 2 秒將它們一行一行地寫入另一個 csv 檔案中,一次一行。我這樣做是因為我有另一個代碼可以遍歷資料并從那里讀取資料。我想知道如何為第三列中包含 3 和 5 的行撰寫資訊?請指教!
例如:
2 552 525
5 552 525
......
......
.....
.
import csv
with open('newfilename.csv', 'w') as f2:
with open('mydata.csv', mode='r') as infile:
reader = csv.reader(infile) # no conversion to list
header = next(reader) # get first line
for row in reader: # continue to read one line per loop
if row[5] == 2 & 5:
uj5u.com熱心網友回復:
第三列的索引為 2,因此您應該檢查是否row[2]為'2'or之一'5'。我通過定義集合select = {'2', '5'}并檢查 if來做到這一點row[2] in select。
我看不出你在用什么header,但我假設你有更多的代碼可以在header某個地方處理。如果您不需要header并且只想跳過第一行,請next(reader)不要將其分配給header但我保留header在我的代碼中,假設您稍后使用它。
我們可以使用time.sleep(2)fromtime模塊來幫助我們每 2 秒寫一行。
下面"in.txt"是包含您提供的示例輸入的 csv 檔案,"out.txt"也是我們寫入的檔案。
代碼
import csv
import time
select = {'2', '5'}
with open("in.txt") as f_in, open("out.txt", "w") as f_out:
reader = csv.reader(f_in)
writer = csv.writer(f_out)
header = next(reader)
for row in reader:
if row[2] in select:
print(f"Writing {row[2:5]} at {time.time()}")
writer.writerow(row[2:5])
# f_out.flush() may need to be run here
time.sleep(2)
輸出
Writing ['2', '552', '525'] at 1650526118.9760585
Writing ['5', '552', '525'] at 1650526120.9763758
"out.txt"
2,552,525
5,552,525
輸入
"in.txt"
0,2,1,437,464,385,171,0:44:4,dog.jpg
1,1,3,452,254,444,525,0:56:2,cat.jpg
2,3,2,552,525,785,522,0:52:8,car.jpg
3,8,4,552,525,233,555,0:52:8,car.jpg
4,7,5,552,525,433,522,1:52:8,phone.jpg
5,9,3,552,525,555,522,1:52:8,car.jpg
6,6,6,444,392,111,232,1:43:4,dog.jpg
7,1,1,234,322,191,112,1:43:4,dog.jpg
uj5u.com熱心網友回復:
我認為您只需要更改 if 陳述句即可獲得所需的行。
例如:
import csv
with open('newfilename.csv', 'w') as f2:
with open('mydata.csv', mode='r') as infile:
reader = csv.reader(infile) # no conversion to list
header = next(reader) # get first line
for row in reader: # continue to read one line per loop
if row[5] in [2,5]:
在 if 中,您將獲得具有 2 或 5 的行
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/461472.html
上一篇:使用forlinein和.appendin回圈重構、填充.csv中的空白
下一篇:為整個表撰寫查詢
