我是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)))
如果有人可以请求帮助并解释这个过程,我将非常感激,因为我真的想学习。如果需要更多解释,请告诉我们!
答案 0 :(得分:4)
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=''
打开该文件。 / p>
答案 1 :(得分:1)
如果您想使用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
是进行排列的正确方法。
答案 2 :(得分:1)
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)
最后所有数据都存储在输出变量
中答案 3 :(得分:0)
这是你需要的吗?
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文件中的每一行。
答案 4 :(得分:0)
如果你关心的只是阅读文件中的原始文本(csv
或不),那么:
with open('some.csv') as f:
w = f.read()
将是w="csv, file, text\nwithout, caring, about columns\n"
答案 5 :(得分:0)
首先,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。
答案 6 :(得分:0)
你应该尝试使用Python 2.7和Python 3.2+的pandas:
import pandas as pd
csv = pd.read_csv("your_file.csv")
然后您可以轻松处理数据。
更有趣here