Python:在b列中为a列中的每个值打印值

时间:2018-07-12 20:14:20

标签: python

我是python的新手,并尝试将其用于我的日常任务以精通它。 我希望能够从csv文件中获取值并像下面的示例一样进行打印。 (我能够从csv读取并将输出写入文件。只需执行此操作即可。)

Name,Item
Andy,Ball
Tom,Car
Zack,Watch

输出应为:

Andy has a Ball
Andy has a Car
Andy has a Watch
Tom has a Ball 
Tom has a Car ... etc.

*我的代码。当然,我编辑了实际的语句,可能没有意义,但这就是代码。我确实创建了一个函数并使代码更短。

import csv

with open('../CSV_Files/File.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    f = open('../Output_Folder/File-1.txt' ,'w')
    for row in reader:
        f.write("Name is %s, network is %s\n" % (str(row['Name']), str(row['Network'])))
    f.close()

with open('../CSV_Files/File.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    f = open('../Output_Folder/File.txt','a')    
    for row in reader:        
        f.write("\n\zone is %s\n" % str(row['Zone']))
    f.close()

print ('Done')

4 个答案:

答案 0 :(得分:0)

您的文件似乎不是csv文件。 csv文件具有分隔符,分隔每列,如下所示:

Name,Item
Andy,Ball
Tom,Car
Zack,Watch

您的文件似乎是固定宽度的文件,特别是上一行中“ C”中的Car与“ B”中的Ball完美对齐。是否需要使用制表符作为分隔符,并且这些制表符已转换为问题中的空格?

无论如何,如我的示例中那样,如果它是一个用逗号分隔的csv文件:

with open('myfile.csv') as f:
    cf = csv.DictReader(f)
    for row in cf:
        print('{Name} has a {Item}'.format(**row))

如果用制表符分隔,只需使用

cf = csv.DictReader(f, delimiter='\t')

现在,固定宽度会更难,因为您必须知道宽度,如下所示:

with open('myfile.csv') as f:
    for line in f:
        line = line.strip()
        name = line[:5]
        item = line[6:]
        print('{} has a {}'.format(name, item))

答案 1 :(得分:0)

一个简单的例子。请注意,由于文件似乎具有标头,因此必须设置分隔符并使用.readline()跳过第一行。

import csv

with open('C:\\file.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    csvfile.readline()
    for row in reader:
        print(str(row[0]) + ' has a ' + str(row[1]))

答案 2 :(得分:0)

假设您使用的是python 3.7,什么输出到同一目录

import csv
myfile = open("output.txt", "w")
with open('yourfile.csv', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',')                           
    for row in spamreader:
        mystr = spamreader[i] + "has a "+ spamreader[i+1]
        myfile.write(mystr + "\n")
myfile.close()

答案 3 :(得分:0)

如果将NameItem读入两个列表-nameitems中,则可以执行以下操作以获取所需的输出。

import itertools
name = ["Andy","Tom","Zack"]
items = ["Ball","Car","Watch"]
for i in itertools.product(name,items):
    print(i[0]+" has a "+i[1])

输出:

Andy has a Ball
Andy has a Car
Andy has a Watch
Tom has a Ball
Tom has a Car
Tom has a Watch
Zack has a Ball
Zack has a Car
Zack has a Watch

itertools.product提供输入可迭代项的笛卡尔积。