如何从 CSV 文件导入数据并将其存储在变量中?

Posted

技术标签:

【中文标题】如何从 CSV 文件导入数据并将其存储在变量中?【英文标题】:How to import data from a CSV file and store it in a variable? 【发布时间】:2014-05-28 04:56:29 【问题描述】:

我对 python 3 非常陌生,我在这里学习。我想有人可以帮助我解决一个基本问题:如何将 CSV 文件中的文本存储为变量,以便稍后在代码中使用。所以这里的想法是将CSV文件导入python解释器:

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        ...

然后从该文件中提取文本并将其存储为变量(即w = ["csv file text"]),以便稍后在代码中使用以创建排列:

print (list(itertools.permutations(["w"], 2)))

如果有人可以帮助并解释这个过程,我将非常感激,因为我真的在努力学习。如果需要更多解释,请告诉我!

【问题讨论】:

你想做什么?是否要存储特定列的所有值?你能在这里举一个小例子吗? 你想置换什么?列 ?行? 感谢大家的帮助和回复——非常感谢,让像我这样的新手感觉得到了一些支持!祝大家万事如意 【参考方案1】:

itertools.permutations() 想要一个可迭代的(例如一个列表)和一个长度作为其参数,因此您的数据结构需要反映这一点,但您还需要在这里定义您想要实现的目标。例如,如果您想读取 CSV 文件并在每个单独的 CSV 字段上生成排列,您可以尝试以下操作:

import csv
with open('some.csv', newline='') as f:
    reader = csv.reader(f)
    w = []
    for row in reader:
        w.extend(row)

print(list(itertools.permutations(w, 2)))

这里的关键是创建一个可以传递给itertools.permutations() 的平面列表——这是通过将w 初始化为一个空列表,然后使用每行的元素/字段扩展其元素来完成的。 CSV 文件。

注意:正如@martineau 所指出的,由于here 解释的原因,当与Python 3 csv 模块一起使用时,应使用newline='' 打开文件。

【讨论】:

在 Python 3 中,应使用 open('some.csv', newline='', ...) 打开 csv 文件,以便与 csv 模块一起使用。此外,w = [row for row in reader]w = list(reader) 都将更“Pythonic”,并且更短更快。 @martineau:如果需要 rows 的排列,则使用列表推导式或 list(reader) 更符合 Pythonic,但是,这不适用于我展示的示例,其中是产生一个平面列表。 OP 没有具体说明需要哪些排列,所以这只是一个例子。但是感谢您提到打开文件以供 Python 3 csv 使用的正确方法——我不知道这一点。我已经更新了答案,并提供了一个参考来证明这一点。 对不起,你是对的——我应该写w = [item for row in csv.reader(f) for item in row]w = list(item for row in csv.reader(f) for item in row)【参考方案2】:

如果您想使用 Python 3(如您在问题中所述)并使用标准 csv 模块处理 CSV 文件,您应该注意如何打开文件。到目前为止,您的代码和答案使用 Python 2 打开 CSV 文件的方式。 Python 3 中的情况发生了变化。

正如shengy 所写,CSV 文件只是一个文本文件,csv 模块将元素作为字符串获取。 Python 3 中的字符串是 unicode 字符串。因此,您应该以文本模式打开文件,并且应该提供编码。由于 CSV 文件处理的性质,您还应该在打开文件时使用newline=''

现在扩展Burhan Khalid... 的解释。在读取 CSV 文件时,您将获得作为字符串列表的行。如果要将 CSV 文件的所有内容读入内存并将其存储在变量中,则可能需要使用行列表(即嵌套列表为行的列表列表)。 for 循环遍历行。 list() 函数以同样的方式遍历序列(这里是通过行序列)并构建项目列表。要将其与将所有内容存储在 content 变量中的愿望结合起来,您可以编写:

import csv

with open('some.csv', newline='', encoding='utf_8') as f:
    reader = csv.reader(f)
    content = list(reader)

现在您可以随心所欲地进行排列。 itertools 是进行排列的正确方法。

【讨论】:

感谢您抽出宝贵时间来解释其中的差异——我真的很感激!【参考方案3】:
import csv
data = csv.DictReader(open('FileName.csv', 'r'))
print data.fieldnames
output = []
for each_row in data:
   row = 
   try:
     p = dict((k.strip(), v) for k, v in p.iteritems() if v.lower() != 'null')
   except AttributeError, e:
     print e
     print p
     raise Exception()
//based on the number of column   
if p.get('col1'):
    row['col1'] = p['col1']
if p.get('col2'):
    row['col2'] = p['col2']
output.append(row)

最后将所有数据存储在输出变量中

【讨论】:

【参考方案4】:

这是你需要的吗?

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=',')
    rows = list(reader)

print('The csv file had  rows'.format(len(rows)))

for row in rows:
   do_stuff(row)

do_stuff_to_all_rows(rows)

有趣的行是rows = list(reader),它将csv文件(将是一个列表)中的每一行转换为另一个列表rows,实际上为您提供了一个列表列表。

如果您有一个包含三行的 csv 文件,rows 将是一个包含三个元素的列表,每个元素的一行代表原始 csv 文件中的每一行。

【讨论】:

【参考方案5】:

如果您只关心读取文件中的原始文本(csv 与否),那么:

with open('some.csv') as f:
    w = f.read()

将是拥有w="csv, file, text\nwithout, caring, about columns\n" 的简单解决方案

【讨论】:

【参考方案6】:

您应该尝试使用 Python 2.7 和 Python 3.2+ 的 pandas:

import pandas as pd
csv = pd.read_csv("your_file.csv")

然后您可以轻松处理数据。

更多乐趣here

【讨论】:

【参考方案7】:

首先,csv 文件也是一个文本文件,因此您可以对文件执行的所有操作,都可以使用csv 文件执行。这意味着f.read()f.readline()f.readlines() 都可以使用。查看这些功能的详细信息here。

但是,由于您的文件是 csv 文件,您可以使用 csv 模块。

# input.csv
# 1,david,enterprise
# 2,jeff,personal

import csv

with open('input.csv') as f:
    reader = csv.reader(f)
    for serial, name, version in reader:
        # The csv module already extracts the information for you
        print serial, name, version

有关csv 模块的更多详细信息是here。

【讨论】:

以上是关于如何从 CSV 文件导入数据并将其存储在变量中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 url 导入 javascript 库并将其存储在变量中?

无法从不同的文件定义导入的对象,将其存储在一个状态中并将其传播到 React 中的另一个变量中

如何通过将 csv 数据存储在变量中来将其访问到 yml 文件中?

如何在 csv 文件中写入和附加数据并将其存储在列表中

如何逐个读取csv文件数据并将其放入变量Using Groovy

如何将 JSON 转换为 CSV 格式并存储在变量中