Python列表子串
我想把newreg.py文件里的变量(比如state、district、dcode等等,这些变量是从一个网页表单获取的数据)读到insertNew.py里。
现在我已经把整个文件读进一个叫'lines'的列表里。接下来,我该怎么从这个'lines'列表中筛选出每个变量(像state、district等,大约有50到55个变量)呢?这个列表里还有HTML代码,因为我把整个网页都读进来了。
有没有更好、更有效的方法来做到这一点?
一旦我能读取到每个变量,我需要把这些值连接起来(转换成字符串),然后插入到MongoDB数据库里。
最后,当数据插入到数据库后,会打开'home.py'页面。
我提供这些细节是为了让大家能更全面地理解问题,从而给出解决方案。我希望我能把问题描述得既简单又完整。
我想遍历这个列表(下面有个示例),并筛选出变量(等号前面的值)。以下是'newreg.py'中的内容:
state = form.getvalue('state','ERROR')
district = form.getvalue('district','ERROR')
dcode = form.getvalue('Dcode','ERROR')
我把一个文件/网页读进了一个列表
fp = open('/home/dev/wsgi-scripts/newreg.py','r')
lines = fp.readlines()
这样我就可以创建一个字典,准备插入到MongoDB里。例如:
info = {'state' : state , 'district' : district, . . . . }
{key : value } [这里的value就是上面列表中的变量]
谢谢
但是当我这样做的时候,出现了以下错误
print getattr(newreg, 'state')
错误信息是
>>> print getattr(newreg, 'state')
Traceback (most recent call last):
File "<stdin>", line 1, in module
AttributeError: 'module' object has no attribute 'state'
我也尝试过
>>> print newreg.state
Traceback (most recent call last):
File "<stdin>", line 1, in module
AttributeError: 'module' object has no attribute 'state'
这是我添加模块的方式
>>> import os,sys
>>> sys.path.append('/home/dev/wsgi-scripts/')
>>> import newreg
>>> newreg_vars = dir(newreg)
>>> print newreg_vars
['Connection', 'Handler', '__builtins__', '__doc__', '__file__', '__name__',
'__package__', 'application', 'cgi', 'datetime', 'os', 'sys', 'time']
上面列表中的Handler是以下内容中的一个类
#!/usr/bin/env python
import os, sys
import cgi
from pymongo import Connection
import datetime
import time
class Handler:
def do(self, environ, start_response):
form = cgi.FieldStorage(fp=environ['wsgi.input'],
environ=environ)
state = form.getvalue('state','<font color="#FF0000">ERROR</font>')
district = form.getvalue('district','<font color="#FF0000">ERROR</font>')
dcode = form.getvalue('Dcode','<font color="#FF0000">ERROR</font>')
1 个回答
我假设你想在运行时把一个Python模块里的变量复制到另一个模块里。
import newreg
newreg_vars = dir(newreg)
print newreg_vars
这段代码会打印出模块“newreg”的所有属性。
要读取模块里的变量,可以使用:
print getattr(newreg, 'state')
print getattr(newreg, 'district')
print getattr(newreg, 'dcode')
或者如果你知道属性的名字,可以用:
print newreg.state
print newreg.district
print newreg.dcode
要把属性转换成字符串,可以使用列表推导式(或者生成器):
newreg_strings = [str(item) for item in newreg_vars]
这样做会省去很多麻烦,因为你就不需要用re
把“newreg”当成文本文件来解析了。
顺便提一下:类型转换和连接是两回事(虽然在其他一些编程语言中,连接可能会涉及到类型转换)。