在 csv 文件中搜索列
Searching columns in a csv file
我有一个生成随机名称和随机问题的程序(两者相互独立)。我创建了一个名为 QuestionGenerator()
的函数,它应该搜索 csv 文件的第二列并将所有值写入数组。
def QuestionGenerator():
questionlist_file = open('StudentNames&Questions.csv')
reader = csv.reader(questionlist_file)
rownum=0
array=[]
for row in reader:
array.append(row)
rownum=rownum+1
i = random.randint(0,3)
question = array[0,1]
return question
目前它将文件中的所有值写入数组,而不仅仅是第二列(问题列)。所以数组应该包含以下值
array = ["Consequences of Devolution", "Sources of the Constitution"...."Reasons for a democratic deficit"]
请注意 csv 文件是一个 excel 电子表格,另存为 .csv
您的代码读取整行并将值保存到数组中。您可以考虑使用 pandas 或 CSV reader 来仅保存目标列。
如果使用 pandas,结构将如下所示:
import pandas as pd
df = pd.read_csv(csv_file)
column_of_interest = df.name_of_column #or df['name_of_column']
使用 CSV 库:
included_cols = [2]
for row in reader:
column_of_interest = list(row[i] for i in included_cols) #included_cols could be a list or single value
希望这对您有所帮助。
Pandas 可能更容易将 csv 文件读入 DataFrame
,但如果您想使用 csv
:
您在 array.append(row)
中阅读的每一行都有两列。要仅获取第二列,请修改代码以读取 array.append(row[1])
以子集到正确的列。
array
实际上是一个问题列表,要获得随机问题,您只需要 select 列表中的一个元素:
i = random.randint(1,3)
question = array[i]
请注意,i 应介于 1 和问题数之间,因为 array
中的第一个条目将是 "questions",即列的名称。为此,我们可以使用 i = random.randint(1, len(array) - 1)
来处理不同数量的问题。
完整的工作代码是:
def QuestionGenerator():
questionlist_file = open('StudentNames&Questions.csv')
reader = csv.reader(questionlist_file)
rownum=0
array=[]
for row in reader:
# Check to make sure the question cell is not blank
if row[1] != '':
# Add only the second column to list
array.append(row[1])
rownum=rownum+1
# Select a random question from the list
i = random.randint(1,len(array) - 1)
question = array[i]
return question
我有一个生成随机名称和随机问题的程序(两者相互独立)。我创建了一个名为 QuestionGenerator()
的函数,它应该搜索 csv 文件的第二列并将所有值写入数组。
def QuestionGenerator():
questionlist_file = open('StudentNames&Questions.csv')
reader = csv.reader(questionlist_file)
rownum=0
array=[]
for row in reader:
array.append(row)
rownum=rownum+1
i = random.randint(0,3)
question = array[0,1]
return question
目前它将文件中的所有值写入数组,而不仅仅是第二列(问题列)。所以数组应该包含以下值
array = ["Consequences of Devolution", "Sources of the Constitution"...."Reasons for a democratic deficit"]
请注意 csv 文件是一个 excel 电子表格,另存为 .csv
您的代码读取整行并将值保存到数组中。您可以考虑使用 pandas 或 CSV reader 来仅保存目标列。
如果使用 pandas,结构将如下所示:
import pandas as pd
df = pd.read_csv(csv_file)
column_of_interest = df.name_of_column #or df['name_of_column']
使用 CSV 库:
included_cols = [2]
for row in reader:
column_of_interest = list(row[i] for i in included_cols) #included_cols could be a list or single value
希望这对您有所帮助。
Pandas 可能更容易将 csv 文件读入 DataFrame
,但如果您想使用 csv
:
您在 array.append(row)
中阅读的每一行都有两列。要仅获取第二列,请修改代码以读取 array.append(row[1])
以子集到正确的列。
array
实际上是一个问题列表,要获得随机问题,您只需要 select 列表中的一个元素:
i = random.randint(1,3)
question = array[i]
请注意,i 应介于 1 和问题数之间,因为 array
中的第一个条目将是 "questions",即列的名称。为此,我们可以使用 i = random.randint(1, len(array) - 1)
来处理不同数量的问题。
完整的工作代码是:
def QuestionGenerator():
questionlist_file = open('StudentNames&Questions.csv')
reader = csv.reader(questionlist_file)
rownum=0
array=[]
for row in reader:
# Check to make sure the question cell is not blank
if row[1] != '':
# Add only the second column to list
array.append(row[1])
rownum=rownum+1
# Select a random question from the list
i = random.randint(1,len(array) - 1)
question = array[i]
return question