【问题标题】:How to check a string for emptyness or length zero如何检查字符串是否为空或长度为零
【发布时间】:2011-03-29 13:19:43
【问题描述】:

我最近问了一个关于将值列表从 txt 文件转换为字典列表的问题。你可以从这里的链接中看到它:See my question here


P883,迈克尔·史密斯,1991
L672,简·柯林斯,1992 年

(添加)
(此处为空行)
L322,兰迪·格林,1992
H732,贾斯汀·伍德,1995(/添加)
^key ^name ^出生年份
===============
这个问题已经得到解答,我使用了以下代码(已接受的答案),效果很好:

def 加载(文件名): 学生 = {}
   infile = open(filename)
   for line in infile:
       line = line.strip()
       parts = [p.strip() for p in line.split(",")]
       students[parts[0]] = (parts[1], parts[2])
   return students 


但是,当 txt 文件中的值中有一个行空间时..(请参阅添加的部分)它不再起作用并给出一个错误,指出列表索引超出范围。

【问题讨论】:

  • 要求检查长度 > 0 的字符串或检查非空字符串真的很差 - -1

标签: python dictionary split strip


【解决方案1】:

检查 for 循环中的空行并跳过它们:

for line in infile:
    line = line.strip()
    if not line:
        continue
    parts = [p.strip() for p in line.split(",")]
    students[parts[0]] = (parts[1], parts[2])

【讨论】:

  • @MarkLakewood 我认为这假设 line 是一个字符串
  • @yuf:不需要假设——因为infile是OP代码中的一个文件,line必须是一个字符串。
【解决方案2】:

通过计算parts 的元素来检查是否有空行(如果parts 中有零个(或通常少于三个)元素,则该行为空行或至少无效)。或通过对照空字符串检查 line 的修剪值。 (抱歉,我不会编写 Python 代码,所以这里没有代码示例……)

记住:您应该始终在为动态创建的数组编制索引之前检查它的大小。

【讨论】:

    【解决方案3】:
    lines = [line.split(', ') for line in file if line]
    result = dict([(list[0], element_list[1:]) for line in lines if line])
    

    【讨论】:

      【解决方案4】:

      检查行是否为空或长度为 0 真的很简单:

      for line in infile:
          line = line.strip()
          if line:
             do_something()
      
          # or
      
          if len(line) > 0:
              do_something()
      

      【讨论】:

      • 对不起,我是初学者,大部分基本代码都不懂
      猜你喜欢
      • 2015-06-05
      • 2017-08-19
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2011-11-25
      • 2012-03-23
      相关资源
      最近更新 更多