我正在从Web服务器下载整个目录.它工作正常,但我无法想象如何在下载之前获取文件大小以进行比较,如果它在服务器上更新了.这可以像我从FTP服务器下载文件一样吗?
import urllib
import re
url = "http://www.someurl.com"
# Download the page locally
f = urllib.urlopen(url)
html = f.read()
f.close()
f = open ("temp.htm", "w")
f.write (html)
f.close()
# List only the .TXT / .ZIP files
fnames = re.findall('^.*<a href="(\w+(?:\.txt|.zip)?)".*$', html, re.MULTILINE)
for fname in fnames:
print fname, "..."
f = urllib.urlopen(url + "/" + fname)
#### Here I want to check the filesize to download or not ####
file = f.read()
f.close()
f = open (fname, "w")
f.write (file) …Run Code Online (Sandbox Code Playgroud) 我创建了一个PHP脚本来更新本地目录中的实时Web服务器.我正在将脚本迁移到Python中.它在大多数情况下工作正常,但在PUT命令之后,文件的大小似乎会改变.因此,文件的大小与服务器上的文件大小不同.
一旦我从FTP服务器再次下载文件,唯一的区别是CR/LF标记.这让我很烦,因为相同的脚本正在比较要更新的文件的大小.此外,如果它意味着什么,该脚本在PHPvíaftp_put中完美运行.
from ftplib import FTP
ftpserver = "myserver"
ftpuser = "myuser"
ftppass = "mypwd"
locfile = "g:/test/style.css"
ftpfile = "/temp/style.css"
try:
ftp = FTP(ftpserver, ftpuser, ftppass)
except:
exit ("Cannot connect")
f = open (locfile, "r")
try:
ftp.delete (ftpfile)
except:
pass
# ftp.sendcmd ("TYPE I")
# ftp.storlines("STOR %s" % ftpfile, f)
ftp.storbinary("STOR %s" % ftpfile, f)
f.close()
ftp.dir (ftpfile)
ftp.quit()
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我在Python 2.5中使用ZipFile创建一个ZIP文件,它到目前为止工作正常:
import zipfile, os
locfile = "test.txt"
loczip = os.path.splitext (locfile)[0] + ".zip"
zip = zipfile.ZipFile (loczip, "w")
zip.write (locfile)
zip.close()
Run Code Online (Sandbox Code Playgroud)
但我找不到如何加密ZIP文件中的文件.我可以使用系统并调用PKZIP -s,但我想必须有更"Pythonic"的方式.我正在寻找一个开源解决方案.
我正在尝试修改我的GreaseMonkey脚本,从window.onload触发到window.DOMContentLoaded,但此事件永远不会触发.
我正在使用FireFox 2.0.0.16/GreaseMonkey 0.8.20080609
这是我正在尝试修改的完整脚本,正在更改:
window.addEventListener ("load", doStuff, false);
Run Code Online (Sandbox Code Playgroud)
至
window.addEventListener ("DOMContentLoaded", doStuff, false);
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Python中扩展一些"基础"类:
class xlist (list):
def len(self):
return len(self)
def add(self, *args):
self.extend(args)
return None
class xint (int):
def add(self, value):
self += value
return self
x = xlist([1,2,3])
print x.len() ## >>> 3 ok
print x ## >>> [1,2,3] ok
x.add (4, 5, 6)
print x ## >>> [1,2,3,4,5,6] ok
x = xint(10)
print x ## >>> 10 ok
x.add (2)
print x ## >>> 10 # Not ok (#1)
print type(x) ## >>> <class '__main__.xint'> ok
x += 5 …Run Code Online (Sandbox Code Playgroud) 有时(在客户的PC中)我需要一个python脚本在Windows shell中执行,如.CMD或.BAT,但没有与PYTHON/PYTHONW关联的.py或.pyw扩展名.
我推出了一对'quick'n dirty'解决方案:
1)
"""
e:\devtool\python\python.exe %0 :: or %PYTHONPATH%\python.exe
goto eof:
"""
# Python test
print "[works, but shows shell errors]"
Run Code Online (Sandbox Code Playgroud)
2)
@echo off
for /f "skip=4 delims=xxx" %%l in (%0) do @echo %%l | e:\devtools\python\python.exe
goto :eof
::----------
# Python test
print "[works better, but is somewhat messy]"
Run Code Online (Sandbox Code Playgroud)
你知道更好的解决方案吗?(即:更简洁或优雅)
更新:
基于@van回答,我找到了更简洁的方法(没有设置ERRORLEVEL)
@e:\devtools\python\python.exe -x "%~f0" %* & exit /b
### Python begins....
import sys
for arg in sys.argv:
print arg
raw_input("It works!!!\n")
###
Run Code Online (Sandbox Code Playgroud) 有没有办法让表单主动控制?
我正在检查"Support.GetActiveControl"方法的帮助,但不支持:)用于Compact Framework.
我想我可以通过向GotFocus所有表单控件添加自定义事件处理程序来跟踪焦点,但我正在寻找一种可以为任何表单实现的更通用的方法.
我有这个代码:
if (PsionTeklogix.Keyboard.Keyboard.GetModifierKeyState(Key.Orange) == KeyState.Lock)
PsionTeklogix.Keyboard.Keyboard.InjectKeyboardCommand(Function.Orange, 0, 0);
if (PsionTeklogix.Keyboard.Keyboard.GetModifierKeyState(Key.Blue) == KeyState.Lock)
PsionTeklogix.Keyboard.Keyboard.InjectKeyboardCommand(Function.Blue, 0, 0);
if (PsionTeklogix.Keyboard.Keyboard.GetModifierKeyState(Key.Shift) == KeyState.Lock)
PsionTeklogix.Keyboard.Keyboard.InjectKeyboardCommand(Function.Shift, 0, 0);
if (PsionTeklogix.Keyboard.Keyboard.GetModifierKeyState(Key.Control) == KeyState.Lock)
PsionTeklogix.Keyboard.Keyboard.InjectKeyboardCommand(Function.Control, 0, 0);
...
Run Code Online (Sandbox Code Playgroud)
我想重构将键/函数定义与动作分开的代码.Key.xxx和Function.xxx不是同一类型.
例如:在Python中,我可以简单地执行以下操作:
keys = (
( Key.Orange, Function.Orange ),
( Key.Blue , Function.Blue ),
( Key.Shift , Function.Shift ),
...
)
psi_key = PsionTeklogix.Keyboard.Keyboard
for key, func in keys:
if psi_key.GetModifierKeyState(key) == KeyState.Lock):
psi_key.InjectKeyboardCommand(func, 0, 0)
Run Code Online (Sandbox Code Playgroud)
在C#中做什么是"正确的方法"?
我正在使用wxPython中的wxStyledTextCtrl,它是Scintilla组件的包装器.
有没有办法在它上面获得备用行颜色(一种背景颜色中的奇数行和另一种颜色中的偶数行)?我正在使用内置的python样式器来突出显示关键字.