Python列表子串

-1 投票
1 回答
799 浏览
提问于 2025-04-17 00:58

我想把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 个回答

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”当成文本文件来解析了。

顺便提一下:类型转换和连接是两回事(虽然在其他一些编程语言中,连接可能会涉及到类型转换)。

撰写回答