【问题标题】:How to delete a string in a loop with Python?如何使用 Python 删除循环中的字符串?
【发布时间】:2018-01-04 03:59:12
【问题描述】:

我有这样格式的文本:

"TEXT1";" TEXT2";"TEXT3";"TEXT4";"TEXT5 ";"";"TEXT6"
"TEXT7";" TEXT8";"TEXT9";"TEXT10";"TEXT11";"";"TEXT12"

我使用了网络抓取,我想删除空字符串 --> [5]。 我怎样才能在一个循环中做到这一点? 代码:

for record in table.find_all('tr', class_="mytable"):
    temp_data = []
    for data in record.find_all("td"):
        temp_data.append(data.text.encode('latin-1'))
    datatable.append(temp_data)
    #how can I delete the [5] here?

【问题讨论】:

  • 这是一个有点不同的问题..
  • 文本是否包含引号?另外,它是在多条线上吗?哪个变量存储文本?
  • 在 csv 文件中没有,如果我在 Notepad++ 中打开它,我会看到这些引号。是的,每一行都包含这个空字符串,这就是我想删除 [5] 项的原因吗?
  • 我喜欢你所说的这与链接的骗子不同,然后接受了一个与该骗子中接受的答案相同的答案:)

标签: python csv web-scraping


【解决方案1】:

如果你想删除空字符串,那么你可以简单地使用它,

newlist = filter(None, oldlist)

【讨论】:

    【解决方案2】:
    a=["a","b","","d"]
    i=0
    while i<len(a):
        if(a[i]==""):
            del a[i]
            i-=1
        i+=1
    

    【讨论】:

      【解决方案3】:

      除了删除空字符串,你不能追加它。

      代码可能如下所示:

      datatable = []
      for record in table.find_all('tr', class_="mytable"):
          temp_data = []
          for data in record.find_all("td"):
              if data.text != "":     #Check if the data is an empty string or not
                  temp_data.append(data.text.encode('latin-1'))   #Append the data if it is not an empty string
          datatable.append(temp_data)
      #print(datatable)
      #[["TEXT1"," TEXT2","TEXT3","TEXT4","TEXT5 ","TEXT6"],["TEXT7"," TEXT8","TEXT9","TEXT10","TEXT11","TEXT12"]]
      

      这很好用,但是如果您在将空字符串添加到列表后仍想删除它,那么您可以按如下方式执行:

      datatable = []
      for record in table.find_all('tr', class_="mytable"):
      temp_data = []
      for data in record.find_all("td"):
          temp_data.append(data.text.encode('latin-1'))
      datatable.append(temp_data)
      #print(datatable)
      #[["TEXT1"," TEXT2","TEXT3","TEXT4","TEXT5 ","","TEXT6"],["TEXT7"," TEXT8","TEXT9","TEXT10","TEXT11","","TEXT12"]]
      
      #Now remove the empty strings from datatable
      for i in range(len(datatable)):
          datatable[i] = filter(None, datatable[i])
          #Since filter returns a filter object (iterator) in Python 3x, use
          #datatable[i] = list(filter(None, datatable[i]))
          #to convert it to list in Python 3x
      #print(datatable)
      #[["TEXT1"," TEXT2","TEXT3","TEXT4","TEXT5 ","TEXT6"],["TEXT7"," TEXT8","TEXT9","TEXT10","TEXT11","TEXT12"]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        相关资源
        最近更新 更多