[英]Python, How to make a nested loop works with multiple columns csv files?
我是 Python 的新手,我想讓 function 使用來自多列 CSV 文件的數據,一行一行地工作,每次運行之間有一些延遲。
這是我想要實現的:
從一個范圍內的第一個 CSV 文件讀取(例如第 0 行到第 3 行)
使用一行的數據,放入function里面的右邊參數部分,延遲一些,下一行同理。
一些延遲,然后轉到下一個 CSV 文件,直到最后一個 CSV 文件。
我嘗試了以下代碼,但無法正常工作。 以下代碼適用於一列 CSV 文件。
我想用 CSV 文件中的數據填充 4 個參數,使用相同的列 header 名稱作為 function 中的參數名稱。
樣品 csv 文件:
img_path,desc_1 title_1,link_1
site.com/image22.jpg,someTitle,description1,site1.com
site.com/image32.jpg,someTitle,description2,site2.com
site.com/image44.jpg,someTitle,description3,site3.com
from abc.zzz import xyz
path_id_map = [
{'path':'file1.csv', 'id': '12345678'},
{'path':'file2.csv', 'id': '44556677'}
{'path':'file3.csv', 'id': '33377799'}
{'path':'file4.csv', 'id': '66221144'}]
s_id = None
for pair in path_id_map:
with open(pair['path'], 'r') as f:
for i in range(0, 3):
zzz.func1(img_path=f.readline().rstrip(','), title_1=f.readline().rstrip(','),
desc_1=f.readline().rstrip(','), link_1=f.readline().rstrip(','), B_id=pair['id'],
s_id=s_id)
return zzz.func1(img_file=img_path, title_1=title_1, desc_1=desc_1,
link_1=link_1, B_id=B_id, s_id=s_id)
time.sleep(25)
感謝您的幫助,使其發揮作用。
readline()
時,都會移至下一行。 因此,首先將該行保存到一個變量中,然后對其進行處理。rstrip
僅刪除字符串邊緣的字符。 由於您沒有尾隨逗號,因此在您的代碼中使用rstrip
無效。 您似乎打算使用split
方法來取用逗號分隔的不同部分。for pair in path_id_map:
with open(pair['path'], 'r') as f:
next(f) # skip first header line
for _ in range(0, 3):
line = next(f)
img_path, desc_1, title_1, link_1 = map(str.strip, line.split(','))
zzz.func1(img_path=img_path, title_1=title_1, desc_1=desc_1,
link_1=link_1, B_id=pair['id'], s_id=s_id)
但無需手動解析 csv 文件。 相反,您可以使用內置的csv
模塊,該模塊具有將每一行讀取到一個字典,其中鍵是標題,值是具有DictReader
的每一列的值。 這將允許您簡單地將行解壓縮到 function 調用中:
import csv
for pair in path_id_map:
with open(pair['path'], 'r') as f:
reader = csv.DictReader(f)
for _ in range(0, 3):
line = next(reader)
zzz.func1(B_id=pair['id'], s_id=s_id, **line)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.