在Python中,如何将略过的列表项转换为字符串?

2024-04-25 21:13:00 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:

这是我的实际代码。我在用美素来刮。一旦清除完成,我使用漂白剂和cleanhtml函数从每个日期条目中删除HTML代码。你知道吗

import mechanize
from bs4 import BeautifulSoup as BS
import urllib2
import bleach
import re
import datetime as dt

def cleanhtml(raw_html):

  cleanr =re.compile('<.*?>')

  cleantext = re.sub(cleanr,'', raw_html)

  return cleantext

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [("User-agent", "Mozilla/5.0 (X11; U; Linux i686; en-US;     rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13")]

sign_in = br.open('https://www.mturk.com/mturk/beginsignin')

br.select_form(name="signIn")
br["email"] = 'xxxx'
br["password"] = 'xxxxx'
logged_in = br.submit()

mturk = br.open("https://www.mturk.com/mturk/status")

soup = BS(mturk.read())

date_column_values_raw = soup.findAll("td", "statusDateColumnValue")

date_column_values = bleach.clean(date_column_values_raw, strip=True)

date_column_values = cleanhtml(date_column_values)

我创建的Python列表有问题。我刮了一页,我有一个日期列表,看起来像这样:

[
Apr 6, 2015
, 
Apr 5, 2015
, 
Apr 4, 2015
, 
Apr 3, 2015
]

我的目标是将这些日期转换为数据库友好的格式,即2015-04-03

我的问题是,只要我尝试在for循环中遍历它们,循环就会分别处理每个字符,而不是按行处理。你知道吗

所以,当我这么做的时候:

for line in date_values:
   print line

我得到: [

 A
 p
 r

 6
 ,

 2
 0
 1
 5
 ,
 ]

等等。。。这显然不是预期的结果。你知道吗

我试过了行。拆分()on/n和for循环中的5,但没有效果。所以我的问题是,一旦我有了我的临时列表,我该如何将每一行数据转换成单独的字符串?你知道吗

如果你有任何见解,我将不胜感激。你知道吗

谢谢!你知道吗


Tags: 代码inbrimportre列表fordate
1条回答
网友
1楼 · 发布于 2024-04-25 21:13:00

似乎您的date_values“list”根本不是一个列表,而只是一个多行字符串。你知道吗

date_values = """[
Apr 6, 2015
, 
Apr 5, 2015
, 
Apr 4, 2015
, 
Apr 3, 2015
]"""

您可以使用str.split()分割该字符串,但不能在for循环中这样,您将尝试分割每个字符!相反,试试这个列表。你知道吗

date_list = [s.strip() for s in date_values[1:-1].split("\n,")]

在这里,[1:-1]去掉了[],然后用一个新行和逗号分开(单独两个都不行),最后是strip和空格。你知道吗

或者先按行拆分,然后将去掉空白后剩下一个以上字符的所有行:

date_list = [s for s in map(str.strip, date_values.splitlines()) if len(s) > 1]

现在,date_list['Apr 6, 2015', 'Apr 5, 2015', 'Apr 4, 2015', 'Apr 3, 2015']。然后可以使用^{} and ^{}重新格式化日期,例如:

import time
for date in date_list:
    d = time.strptime(date, "%b %d, %Y")
    date2 = time.strftime("%Y-%m-%d", d)
    print date, " >", date2

输出:

Apr 6, 2015  > 2015-04-06
Apr 5, 2015  > 2015-04-05
Apr 4, 2015  > 2015-04-04
Apr 3, 2015  > 2015-04-03

相关问题 更多 >