Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果语句体不工作,则嵌套在内部的追加函数_Python_List_If Statement_Append - Fatal编程技术网

Python 如果语句体不工作,则嵌套在内部的追加函数

Python 如果语句体不工作,则嵌套在内部的追加函数,python,list,if-statement,append,Python,List,If Statement,Append,我对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' s

我对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”、“swpt”、“cd”和“pt”是指我的csv中的#列(完成的函数将允许用户输入这些变量的值)

我假设我在“natList”作用域方面遇到了一些问题——但我尝试将“natList=[]”语句移动到代码中的不同位置,但没有任何效果

我可以在控制台中运行上述操作,然后分别运行“append.natList([Switch,Switchport,Label]),它会因为某种原因工作


谢谢你的帮助

while条件似乎需要额外的括号。只需以这种方式添加一些
while(Site in Site list)==True:
,或者Padraic
建议的更干净的方式,而Site in Site list:

它正在比较布尔对象和字符串对象。

更改

while Site in siteList == True:


您可能需要查看
csv
模块,因为该模块试图简化csv文件的读取和写入,例如:

import csv

with open('<file>') as fp:
    ...
    reader = csv.reader(fp)
    if portfield == 'y':
        natlist = [[row[i] for i in [sw, swpt, lbl]] for row in fp if row[0] in sitelist]
    else:
        natlist = [[row[i] for i in [sw, cd, pt, lbl]] for row in fp if row[0] in sitelist]

print natlist

只是一个建议。。您可能应该在帖子中添加一个python标记,以便人们更容易看到它。我通常只是浏览包含特定标签的帖子。遗憾的是,我对python几乎一无所知——至今为止。希望你能找到答案。谢谢!这个网站的新手…我也没问题-如果他们认为你做得不好,会有很多人告诉你如何发布:)把它当作帮助。有时,他们也可能相当直率。不要读太多。顺便说一句,试试这里;-)顺便说一句,我会改变这一点,而如果条款。因为它将不确定地执行该循环。现在,当我运行它时,它会锁定我的计算机一会儿,然后给我一个内存错误。我明白了!感谢您对inulinmux12的帮助。我不得不像你说的那样在“站点列表中的站点”语句周围添加括号,并将“while”循环更改为“if”语句,现在它可以工作了。
站点列表中的站点:
将是正确的方式。如果答案对你有帮助,请将其标记为正确:)
import csv

with open('<file>') as fp:
    ...
    reader = csv.reader(fp)
    if portfield == 'y':
        natlist = [[row[i] for i in [sw, swpt, lbl]] for row in fp if row[0] in sitelist]
    else:
        natlist = [[row[i] for i in [sw, cd, pt, lbl]] for row in fp if row[0] in sitelist]

print natlist
import csv

with open('<file>') as fp:
    ...
    reader = csv.DictReader(fp)
    if portfield == 'y':
        fields = ['Switch', 'card/port', 'Label']
    else:
        fields = ['Switch', '??', '??', 'Label']
    natlist = [[row[f] for f in fields] for row in fp if row['Building/Site'] in sitelist]

print natlist