【问题标题】:Matching images to list in csv file将图像匹配到 csv 文件中的列表
【发布时间】:2018-02-25 21:33:57
【问题描述】:

我有一个包含许多不同图像 (.jpg) 的文件夹以及一个包含不同图像名称的 csv 文件。 csv 文件的每一行都有不同的图像名称组合。例如,对于 3 名参与者,组合如下所示:

images1 = ['01_2.jpg', '06_2.jpg', '08_1.jpg', '04_2.jpg', '10_1.jpg']
images2 = ['10_1.jpg', '01_2.jpg', '06_2.jpg', '08_1.jpg', '03_1.jpg']
images3 = ['06_2.jpg', '08_1.jpg', '01_2.jpg', '04_2.jpg', '10_1.jpg']

在 csv 文件中,上述列表中的每个元素都属于一列。此外,images1 在第一行,images2 在第二行,images3 在第三行。文件如下所示:

list_stim.csv:

01_2.jpg, 06_2.jpg, 08_1.jpg, 04_2.jpg, 10_1.jpg
10_1.jpg, 01_2.jpg, 06_2.jpg, 08_1.jpg, 03_1.jpg
06_2.jpg, 08_1.jpg, 01_2.jpg, 04_2.jpg, 10_2.jpg

我的问题发生在尝试从 csv 文件中随机选择一行(按连续顺序遍历其每一列)并将其与图像文件夹中的每个 name.jpg 匹配时。由于 csv 文件包含每行中图像的呈现顺序,我希望第 n 行 m 列中的名称与其字符串名称匹配的图像(例如'06_2.jpg')。

如何使用 csv 文件中一行中的每个项目从文件夹中检索图像并呈现它们?到目前为止,我已经完成了以下工作:

from psychopy import core, visual, gui, data, misc, event, logging
from time import strftime
import numpy, random
import os, glob
import string
import csv

# RETRIEVE IMAGES FROM FOLDER
path = "/Users/mdc/Dropbox/UMARM/int/stim/"
paintings = []
for file in os.listdir( path ) 
    if file.lower().endswith(".jpg"):
        paintings.append(file)

# READ ITEMS
stim_order = [] # to store some list from csv (random row)

f1 = open('list_stim.csv')
items = csv.reader(f1, delimiter=',', quotechar='"')

for row in items:
    stim_order.append(row)

【问题讨论】:

  • 请编辑问题以包含来自list_stim.csv的示例
  • 我添加了一个示例,说明文件对于 3 名参与者的外观
  • 最好以原始文本格式包含数据,然后人们可以复制/粘贴它。作为图像,您会期望人们输入它来测试您的代码。
  • @MartinEvans 我还没有找到添加文档本身的方法,但我直接复制了链接下的数据以及文件的屏幕截图。
  • 我已按照您的指示包含了数据。

标签: python csv


【解决方案1】:

要从 CSV 文件中获取随机行,您可以使用以下方法:

import csv
import random

with open('list_stim.csv') as f_input:
    csv_input = csv.reader(f_input)
    image_sets = list(csv_input)
    image_set = random.choice(image_sets)

    for image in image_set:
        print image

这会将整个 CSV 文件读入名为 image_sets 的行列表中。然后它使用 Python 的 random.choice() 函数来选择一个随机行。然后它使用一个循环来显示随机行中的每个图像。

所以可能的随机输出是:

10_1.jpg
01_2.jpg
06_2.jpg
08_1.jpg
03_1.jpg

然后您可以压缩此代码以获得相同的结果:

import csv
import random

with open('list_stim.csv') as f_input:
    for image in random.choice(list(csv.reader(f_input))):
        print image

【讨论】:

    猜你喜欢
    • 2015-12-15
    • 2022-11-11
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多