繁体   English   中英

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

[英]How to import data from a CSV file and store it in a variable?

我是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)))

如果有人可以帮助和解释这一过程,我将非常感谢我的努力。 请让我知道是否需要更多说明!

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指出的,出于此处说明的原因,与Python 3 csv模块一起使用时,应使用newline=''打开文件。

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

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

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

import csv

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

现在,您可以根据需要进行排列。 itertools是进行排列的正确方法。

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)

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

这是您需要的吗?

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文件中的每一行。

如果您只关心读取文件中的原始文本(是否为csv ),则:

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

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

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

但是,由于您的文件是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模块的更多详细信息在这里

您应该尝试可与Python 2.7和Python 3.2+一起使用的pandas:

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

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

在这里更有趣

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM