更新:我现在看到 CSV 编写器正确解析端口号,即使使用 dialect='excel'。不知道我之前看到了什么,但显然之前没有这样做。在证明并非如此之前,我必须认为它是可疑的。无论如何,我对尝试的想法持开放态度......
我正在使用 CiscoConfParse 解析多个文件并编写一个 CSV 文件,并将信息拆分为单独的单元格。我的问题是,如果端口号以“0”即“0/1”开头,它们看起来不错,但 csv.writer 否则无法正确解析端口号。例如,当使用 dialect='excel' 时,'1/1' 会出现 'Jan-00',如下所示。
这是我此时的代码:
import os
import re
from ciscoconfparse import CiscoConfParse
import csv
def main():
path="K:\\Temp work\\120\\New\\Configs\\Working\\" # insert (\\) the path to the directory of interest
for path, dirs, files in os.walk(os.path.abspath(path)):
for f in os.listdir(path):
file_path = os.path.join(path, f)
out_file = 'PC.csv' # change to the name of the file to be created
fo = open(out_file, "ab")
fWriter = csv.writer(fo, dialect='excel')
fWriter.writerow([f])
with open(file_path, "r"):
parse = CiscoConfParse(file_path)
vlanList = parse.find_blocks("(?i)^interface [Pp]")
for line in vlanList:
lod = re.split(r'\s*',line)
writer = csv.writer(fo, delimiter=",", dialect='excel')
writer.writerow(lod)
fo.close()
if __name__=='__main__':
main()
当我更改代码以包含以下内容时...
csv.register_dialect('singlequote', quotechar="'", quoting=csv.QUOTE_ALL)
...并更改为 dialect='singlequote' 在文本编辑器中查看 CSV 时会正确解析。然后我导入 Excel,虽然一切都正确,但它当然有单引号。
不幸的是,此时我不想要单引号。我选择了所有并格式化为文本,然后用“无”替换引号字符,单引号离开,但 Excel 然后将字段更改回日期字段,我又回到了开始的地方。我当然可以在 CSV(文本)文件中删除引号,但是当将其导入 Excel 时 - 即使我手动导入并指定字段为文本,Excel 仍会覆盖我的格式并将其设为日期。(注意:我已经尝试在 Excel 中关闭自动更正)
有什么建议么?