簡體   English   中英

Python,如何使嵌套循環適用於多列 csv 文件?

[英]Python, How to make a nested loop works with multiple columns csv files?

我是 Python 的新手,我想讓 function 使用來自多列 CSV 文件的數據,一行一行地工作,每次運行之間有一些延遲。

這是我想要實現的:

  1. 從一個范圍內的第一個 CSV 文件讀取(例如第 0 行到第 3 行)

  2. 使用一行的數據,放入function里面的右邊參數部分,延遲一些,下一行同理。

  3. 一些延遲,然后轉到下一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM