【问题标题】:Change content of multiline file into a list将多行文件的内容更改为列表
【发布时间】:2010-11-18 14:32:58
【问题描述】:

如何解析以下文件,并将每一行转换为列表的一个元素(每行开头都有一个空格)?不幸的是,我一直很讨厌正则表达式:/ 所以转这个:

 32.42.4.120', '32.42.4.127
 32.42.5.128', '32.42.5.255
 32.42.15.136', '32.42.15.143
 32.58.129.0', '32.58.129.7
 32.58.131.0', '32.58.131.63
 46.7.0.0', '46.7.255.255

进入列表:

('32.42.4.120', '32.42.4.127'),
('32.42.5.128', '32.42.5.255'),
('32.42.15.136', '32.42.15.143'),
('32.58.129.0', '32.58.129.7'),
('32.58.131.0', '32.58.131.63'),

【问题讨论】:

  • 最后一行怎么了?

标签: python regex parsing list


【解决方案1】:

这个怎么样? (如果我错了,至少在投反对票之前让我知道)

>>> x = [tuple(line.strip().split("', '")) for line in open('file')]
>>> x
[('32.42.4.120', '32.42.4.127'), ('32.42.5.128', '32.42.5.255'), ('32.42.15.136', '32.42.15.143'), ('32.58.129.0', '32.58.129.7'), ('32.58.131.0', '32.58.131.63'), ('46.7.0.0', '46.7.255.255')]

【讨论】:

    【解决方案2】:

    不需要正则表达式:

    l = []
    
    with open("name_file", "r") as f:
       for line in f:
           l.append(line.split(", "))
    

    如果你想删除第一个空格并拥有元组,你可以这样做:

    l = []
    
    with open("name_file", "r") as f:
       for line in f:
           data = line.split(", ")
           l.append((data[0].strip(), data[1].strip()))
    

    【讨论】:

    • 缺少 nit - 他有前导空格,所以它需要是 line.strip().split()
    【解决方案3】:
    l = []
    f = open("test_data.txt")
    for line in f:
     elems = line[1:-1].split("', '")
     l.append((elems[0], elems[1]))
    f.close()
    
    print l
    

    输出:

    [('32.42.4.120', '32.42.4.127'), ('32.42.5.128', '32.42.5.255'), ('32.42.15.136', '32.42.15.143'), ('32.58. 129.0', '32.58.129.7'), ('32.58.131.0', '32.58.131.63'), ('46.7.0.0', '46.7.255.25')]

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 2013-09-05
      • 1970-01-01
      • 2017-06-29
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      相关资源
      最近更新 更多