我正在尝试编写一个非常简单的Python实用程序供个人使用,它计算文本文件中为命令行指定的谓词为true的行数.这是代码:
import sys
pred = sys.argv[2]
if sys.argv[1] == "stdin" :
handle = sys.stdin
else :
handle = open(sys.argv[1])
result = 0
for line in handle :
eval('result += 1 if ' + pred + ' else 0')
print result
Run Code Online (Sandbox Code Playgroud)
当我使用它运行时python count.py myFile.txt "int(line) == 0",我收到以下错误:
File "c:/pycode/count.py", line 10, in <module>
eval('toAdd = 1 if ' + pred + ' else 0')
File "<string>", line 1
toAdd = 1 if int(line) == 0 else 0
Run Code Online (Sandbox Code Playgroud)
这看起来对我来说是完全有效的Python代码(虽然我之前从未使用过Python的eval,所以我不知道它的怪癖,如果有的话).请告诉我如何解决这个问题才能让它发挥作用.
我有这个python cgi脚本,检查它是否从同一个IP多次访问,如果一切正常,读取一个大文件格式磁盘(11MB),然后将其作为下载返回.
它有效,但性能很糟糕.瓶颈似乎是一遍又一遍地读取这个巨大的文件:
def download_demo():
"""
Returns the demo file
"""
file = open(FILENAME, 'r')
buff = file.read()
print "Content-Type:application/x-download\nContent-Disposition:attachment;filename=%s\nContent-Length:%s\n\n%s" % (os.path.split(FILENAME)[-1], len(buff), buff)
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它更快?我想过使用ram磁盘来保存文件,但必须有一些更好的解决方案.使用mod_wsgi而不是cgi脚本帮助?我能将大文件保存在apache的内存空间吗?
任何帮助是极大的赞赏.
将格式上的字符串转换"1-2-3-4"为列表的最佳方法是什么[1, 2, 3, 4]?该字符串也可能为空,在这种情况下,转换应返回一个空列表[].
这就是我所拥有的:
map(lambda x: int(x),
filter(lambda x: x != '',
"1-2-3-4".split('-')))
Run Code Online (Sandbox Code Playgroud)
编辑:对不起所有在我更正我的问题之前回答的人,在第一分钟左右不清楚.
我喜欢RoR中的功能之一是数据库管理,它可以隐藏所有sql语句,而且,在RoR中更改不同的数据库非常容易,Python 3000中有类似的框架吗?
是否有一些内置函数告诉我路径是否绝对?我想要一些与平台无关的东西.
我正在尝试使用python制作一个"Caesar's Cipher".这是我到目前为止所做的.谁能告诉我这是怎么回事?我正朝着正确的方向前进吗?我错过了什么?当我运行程序说例如(josh很酷)我没有得到同一行的密码.我这样看起来像这样main(3)
m
r
v
k
l
v
f
r
r
o
Run Code Online (Sandbox Code Playgroud)
但它把每个字母都放在一个新的界限上.我怎么能这样做它在一条线上?
def main(k):
if k<0 or k>231:
print "complaint"
raise SystemExit
Input = raw_input("Please enter Plaintext to Cipher")
for x in range(len(Input)):
letter=Input[x]
if letter.islower():
x=ord(letter)
x=x+k
if x>122:
x=x-122+97
print chr(x),
if letter.isupper():
x=ord(letter)
x=x+k
if x>90:
x=x-90+65
print chr(x),
Run Code Online (Sandbox Code Playgroud) 我正在使用"top"实用程序来分析我的服务器的CPU使用情况.其中一个CPU参数标记为"st",现在显示"10.0%st"st是什么意思?你知道在哪里可以找到其他params意思吗?
我想动态导入模块列表.我这样做有问题.Python总是喊出来ImportError告诉我我的模块不存在.
首先,我获取模块文件名列表并删除".py"后缀,如下所示:
viable_plugins = filter(is_plugin, os.listdir(plugin_dir))
viable_plugins = map(lambda name: name[:-3], viable_plugins)
Run Code Online (Sandbox Code Playgroud)
然后我os.chdir到插件目录和map __import__整个事情,像这样:
active_plugins = map(__import__, viable_plugins)
Run Code Online (Sandbox Code Playgroud)
但是,当我active_plugins变成一个列表并尝试访问其中的模块时,Python会抛出一个错误,说它无法导入模块,因为它们似乎不在那里.
我究竟做错了什么?
编辑:只需使用交互式解释,这样做os.chdir并__import__(modulefilename)产生正是我需要的.那么为什么上述方法不起作用呢?我是否对Python的功能部件做错了什么?
假设我有一个包含数字和其他字符的字符串.
我想将字符串减少到只有数字.
铁从23232-2222-d23231到23232222223231
可以用string.replace()完成吗?
如果没有,最简单和最简单的方法是什么?
10倍!
我有一份清单.它包含x个列表,每个列表都包含y个元素.我想将每个元素与所有其他元素配对,只需一次,(a,b = b,a)
编辑:这被批评为太模糊.所以我将描述历史.我的函数产生随机方程并使用遗传技术,变异和杂交它们,选择适应性.经过多次迭代后,它返回一个包含12个对象的列表,按其"等式"属性的适合度排序.使用'parallel python'模块运行此函数8次,返回包含8个12个对象列表(每个对象具有方程属性)的列表.现在,在每个列表中,12个对象已经相互交叉.我希望将列表中的每个对象与所有其他列表中的所有其他对象进行交叉繁殖,但不要与它自己的列表中的对象进行交叉混合.(哇!)
python ×8
python-3.x ×2
c# ×1
cgi ×1
eval ×1
frameworks ×1
import ×1
linux ×1
mod-wsgi ×1
performance ×1
string ×1
syntax-error ×1