我对Python还不太熟悉(最近两周才开始学习),我正在尝试编写一个脚本来解析csv文件,以便将一些字段提取到列表中:

from string import Template
import csv
import string

site1 = 'D1'
site2 = 'D2'
site3 = 'D5'
site4 = 'K0'
site5 = 'K1'
site6 = 'K2'
site7 = '0'
site8 = '0'
site9 = '0'
lbl = 1
portField = 'y'
sw = 5
swpt = 6
cd = 0
pt = 0
natList = []
with open(name=r'C:\Users\dtruman\Documents\PROJECTS\SCRIPTING - NATAERO DEPLOYER\NATAERO DEPLOYER V1\nataero_deploy.csv') as rcvr:
    for line in rcvr:
        fields = line.split(',')
        Site = fields[0]
        siteList = [site1,site2,site3,site4,site5,site6,site7,site8,site9]
        while Site in siteList == True:
            Label = fields[lbl]
            Switch = fields[sw]
            if portField == 'y':
                Switchport = fields[swpt]
                natList.append([Switch,Switchport,Label])
            else:
                Card = fields[cd]
                Port = fields[pt]
                natList.append([Switch,Card,Port,Label])
print natList

即使我去掉ELSE语句并在if子句之后插入我的代码——我也可以验证“Switchport”(if子句中的第一个语句)是否成功地填充了csv文件中的Str以及“Switch”和“Label”。但是,由于某些原因,“natList”没有附加从csv的每一行解析的字段。Python不返回错误——只是根本不追加“natList”。
这实际上是一个函数(一旦代码本身开始工作),但现在,我只是将函数参数设置为全局变量,以便能够在iPython控制台中运行它,而不必调用函数。
“lbl”、“sw”、“sw pt”、“cd”和“pt”指的是我的csv中的列#(完成的函数允许用户为这些变量输入值)。
我假设我遇到了“natList”作用域的一些问题——但是我已经尝试将“natList=[])语句移动到代码中的不同位置,但没有成功。
我可以在控制台中运行上面的命令,然后分别运行“append.natList([Switch,Switchport,Label]”,这是有原因的。。。。?
谢谢你的帮助!

最佳答案

似乎while条件需要一个额外的括号。只需用这种方式添加一些while (Site in siteList) == True:或Padraicwhile Site in siteList:建议的更干净的方式。
它正在比较布尔对象和字符串对象。

10-08 13:41