import os import csv import random #打开文件,将谜语集读成字典 def getDic(fileName): dic={} with open(fileName,'r',encoding='utf-8') as file: reader=csv.reader(file) next(reader) #跳过文件中的表头 for row in reader: dic[row[0]]=row[1] #谜面作为key,谜底作为value return dic #生成长度为n的试卷列表,每一个元素为一套试卷列表 def creatPapers(dic,n): tests=[] items=list(dic.keys()) for i in range(n): random.shuffle(items) #打乱列表顺序取前10题 ls=items[:10] tests.append(ls) return tests #生成n个试卷文件和n个答卷文件 def createFiles(lsPapers,lsAnswers,n): for i in range(n): fpn="paper" + str(i+1) + ".txt" with open(fpn,'w',encoding='utf-8') as filep: filep.writelines([item + '\n' for item in lsPapers[i]]) fan="answer" + str(i+1) + ".txt" with open(fan,'w',encoding='utf-8') as filea: filea.writelines([item + '\n' for item in lsAnswers[i]]) #主程序,生成n套试卷和答卷 os.chdir("c:\\python38") fn="儿童谜语集.csv" n=5 riddles=getDic(fn) papers=creatPapers(riddles,n) answers=[] #根据谜面列表papers生成对应的答案列表 for paper in papers: ans=[riddles[item] for item in paper] answers.append(ans) createFiles(papers,answers,n)
时间: 2024-03-04 20:53:54 浏览: 18
这段代码是用 Python 实现的生成试卷和答卷的程序。它包含了三个函数,分别是 `getDic`、`creatPapers` 和 `createFiles`。其中 `getDic` 函数用于读取谜语集文件并将其转换成字典格式,`creatPapers` 函数可以生成多个试卷,每个试卷包含10道题目,`createFiles` 函数用于将试卷和答卷写入文件中。在主程序中,首先将工作目录切换到指定目录,然后读取谜语集文件,生成试卷和答卷,并将它们写入文件中。
相关问题
import os import csv def detLabel(filename): #determine the label of the recording if "cello" in filename: label = 0 elif "church" in filename: label = 1 elif "clarinet" in filename: label = 2 elif "flute" in filename: label = 3 elif "guitar" in filename: label = 4 elif "harp" in filename: label = 5 elif "marimba" in filename: label = 6 elif "perldrop" in filename: label = 7 elif "piano" in filename: label = 8 elif "synlead3" in filename: label = 9 else: #violin label = 10 return label fileOrigin = "samples" dataFile = "data.csv" with open(dataFile, 'w', newline='') as csvfile: fileWriter = csv.writer(csvfile, delimiter=',') fileWriter.writerow(['filename', 'instrument']) for filename in os.listdir(fileOrigin): fileWriter.writerow([filename, detLabel(filename)])
这段代码的作用是将文件夹samples中的音频文件按照乐器种类的不同标记,并将它们的名称和标记存储在名为data.csv的CSV文件中。
首先,定义了一个名为detLabel的函数,用于根据文件名确定音频文件所属的乐器种类,并返回一个标记(从0到10)。其中,0~9分别代表cello、church、clarinet、flute、guitar、harp、marimba、perldrop、piano和synlead3,10代表violin。
然后,代码定义了两个变量fileOrigin和dataFile,分别表示存放音频文件的文件夹路径和CSV文件的路径。
接下来,使用Python内置的os模块中的listdir()函数遍历fileOrigin文件夹中的所有文件名,并将它们传递给detLabel函数,获取对应的标记。最后,将文件名和标记写入data.csv文件中,以逗号分隔。其中,第一行为文件头,包括两列:filename和instrument。
with open('filename.csv', 'r') as file: reader = csv.reader(file)
这段代码打开一个名为"filename.csv"的CSV文件,并使用Python上下文管理器(with语句)来打开文件。然后,使用csv模块中的reader()函数创建一个reader对象,该对象可以逐行读取CSV文件中的内容。注意,在调用csv模块中的reader()函数之前,需要先导入csv模块。可以使用for循环来遍历reader对象,读取文件中的每一行并进行处理。例如:
```
import csv
with open('filename.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
# 处理每一行数据
print(row)
```
在这个例子中,每次循环读取一行数据,并将该行数据存储在一个列表中,然后通过print语句将该列表输出到控制台。