所以,这是一个看似简单的问题,但我显然非常沉闷.我有一个小脚本从网页下载所有的.bz2文件,但由于某种原因,该文件的解压缩让我头疼.
我是一个Python新手,所以答案可能很明显,请帮助我.
在脚本的这一部分,我已经有了这个文件,我只是想把它读出来变量,然后解压缩?是对的吗?我已经尝试了各种方法来做到这一点,我通常在这个片段的最后一行得到"ValueError:找不到流的结尾"错误.我试图打开zipfile并以无数种方式将其写入字符串.这是最新的.
openZip = open(zipFile, "r")
s = ''
while True:
newLine = openZip.readline()
if(len(newLine)==0):
break
s+=newLine
print s
uncompressedData = bz2.decompress(s)
Run Code Online (Sandbox Code Playgroud)
嗨Alex,我应该列出我尝试过的所有其他方法,因为我尝试过read()方式.
方法A:
print 'decompressing ' + filename
fileHandle = open(zipFile)
uncompressedData = ''
while True:
s = fileHandle.read(1024)
if not s:
break
print('RAW "%s"', s)
uncompressedData += bz2.decompress(s)
uncompressedData += bz2.flush()
newFile = open(steamTF2mapdir + filename.split(".bz2")[0],"w")
newFile.write(uncompressedData)
newFile.close()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
uncompressedData += bz2.decompress(s)
ValueError: couldn't find end of stream
Run Code Online (Sandbox Code Playgroud)
方法B.
zipFile = steamTF2mapdir + filename
print 'decompressing ' …Run Code Online (Sandbox Code Playgroud) 我尝试使用fork和execlp的程序,其中父地址空间被"ls"命令替换.
#include<stdio.h>
main()
{
int pid,j=10,fd;
pid=fork();
if(pid==0)
{
printf("\nI am the child\n");
execlp("/bin/ls","ls",NULL);
printf("\nStill I am the child\n");
}
else if (pid > 0)
{
printf("\n I am the parent\n");
wait();
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行程序时,最后一行的孩子
printf("\nStill I am the child\n");
Run Code Online (Sandbox Code Playgroud)
没有打印.为什么?
我正在尝试下载html文件中包含的所有png文件.我很难捕获404状态异常,而我的程序只是崩溃了.
以下是一些示例:
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as L
main = do
let badUrl = "http://www.google.com/intl/en_com/images/srpr/WRONG.png"
imgData <- (simpleHttp badUrl) `catch` statusExceptionHandler
L.writeFile "my.png" imgData
statusExceptionHandler :: t -> IO L.ByteString
statusExceptionHandler e = (putStrLn "oops") >> (return L.empty)
Run Code Online (Sandbox Code Playgroud)
我的"oops"消息从不打印,而是应用程序崩溃:
StatusCodeException(Status {statusCode = 404,statusMessage ="Not Found"})[("Content-Type","text/html; charset = UTF-8"),("X-Content-Type-Options","nosniff "),("日期","星期五,2012年1月27日03:10:34 GMT"),("服务器","sffe"),("内容长度","964"),("X-XSS -Protection","1; mode = block")]
我究竟做错了什么?
更新:
根据Thoma的建议,我将代码更改为以下代码段,现在已经适当地处理了异常处理.
main = do
let badUrl = "http://www.google.com/intl/en_com/images/srpr/WRONG.png"
imgData <- (simpleHttp badUrl) `X.catch` statusExceptionHandler
case imgData of x | x == L.empty -> …Run Code Online (Sandbox Code Playgroud) 我在多个子文件夹中的.txt文件中有很多任务.我试图从这些文件夹,它们包含的文件以及文件中的文本行中随机选取总共10个任务.应删除或标记选定的行,以便在下次执行时不会选择它.这可能是一个太宽泛的问题,但我很欣赏任何意见或方向.
这是我到目前为止的代码:
#!/usr/bin/python
import random
with open('C:\\Tasks\\file.txt') as f:
lines = random.sample(f.readlines(),10)
print(lines)
Run Code Online (Sandbox Code Playgroud) 我试图通过使用减少异步调用(node + socket.io)的嵌套,async.waterfall我最终不得不在瀑布中追加参数,因为以后需要它们.此代码可能更好地解释:
//原始版本:
socket event: turn action
socket.on('turn action', function(gameId, turnAction, clientFn) {
socket.get('corp', function(err, corp) {
gameProvider.processTurnAction(gameId, corp.id, turnAction, function(err, msg, game) {
clientFn(msg, game);
});
});
});
Run Code Online (Sandbox Code Playgroud)
// async.js版本
async.waterfall([
function(callback) {
socket.on('turn action', function(gameId, turnAction, clientFn) {
callback(null, gameId, turnAction, clientFn);
});
},
function(gameId, turnAction, clientFn, callback) {
socket.get('corp', function(err, corp) {
callback(null, gameId, turnAction, clientFn, corp);
});
},
function(gameId, turnAction, clientFn, corp, callback) {
gameProvider.processTurnAction(gameId, corp.id, turnAction, function(err, msg, game) {
clientFn(msg,game);
}); …Run Code Online (Sandbox Code Playgroud) 我无法让这个导入在haskell中工作.
import Network.HTTP.Conduit
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我收到以下错误:
$ ghc Play.hs
Play.hs:1:8:
Could not find module `Network.HTTP.Conduit'
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)
如果我尝试在GHCI中加载文件,则会发生同样的错误.
我已通过cabal安装了最新版本的http-conduit.这是cabal的输出:
$ cabal -list http-conduit
* http-conduit
Synopsis: HTTP client package with conduit interface and HTTPS support.
Default available version: 1.8.2
Installed versions: 1.6.0.4, 1.8.2
Homepage: http://www.yesodweb.com/book/http-conduit
License: BSD3
* http-conduit-browser
Synopsis: Browser interface to the http-conduit package
Default available version: 1.6.3
Installed versions: 1.6.3
Homepage: https://github.com/exbb2/http-conduit-browser
License: BSD3
Run Code Online (Sandbox Code Playgroud)
如果它可能有所作为,我使用的是Ubuntu 12.04.
任何想法为什么这不会导入?
编辑:'ghc-pkg list'的输出:
$ …Run Code Online (Sandbox Code Playgroud) 我使用http-conduit库版本2.0+从http://URL 获取内容:
import Network.HTTP.Conduit
myurl = ... -- Your URL goes here
main = do content <- simpleHttp myurl
print $ content
Run Code Online (Sandbox Code Playgroud)
运行此程序时,我收到此错误:
*** Exception: TlsException (HandshakeFailed (Error_Protocol
("certificate rejected: certificate is not allowed to sign another certificate",
True,CertificateUnknown)))
Run Code Online (Sandbox Code Playgroud)
从错误消息中可以看出,问题是无法Network.HTTP.Conduit正确验证服务器证书(在这种情况下,证书链中似乎存在问题)
如何更改上面的代码以忽略证书错误(即根本不验证证书)?
尝试使用类似命令在我的计算机上安装任何软件包时
cabal install http-conduit
Run Code Online (Sandbox Code Playgroud)
安装中止,出现以下错误:
/usr/bin/ld: --hash-size=31: unknown option
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
注意:这个问题故意不会显示研究工作,因为它是以问答方式立即回答的.
我需要创建一个将存储在Windows托盘栏中的Web应用程序,以防止用户意外关闭我的应用程序(无需预先关闭警报消息).
我认为Google Chrome的后台应用程序可能是正确的方法,主要是因为我不需要跨浏览器兼容性,我必须选择用户将使用哪个浏览器来运行此Web应用程序.
唯一的问题是,我不明白我是否可以通过此功能实现我所需要的.
我在Chrome 倒计时应用程序中只发现了这个背景应用程序示例 但是这个应用程序使用了"背景页面"功能,这与我正在寻找的不同.
如何让Chrome应用在托盘栏中最小化(甚至在任务栏中也可以),而不是关闭?
出于安全原因,我localhost只想听,使用反向代理处理远程访问.
如何调用run仅侦听特定主机/ IP?
注意:这个问题故意没有研究,因为它回答了Q&A-Style.
haskell ×4
http-conduit ×3
python ×2
binutils ×1
c ×1
cabal ×1
compression ×1
conduit ×1
exec ×1
fork ×1
ghc ×1
gold-linker ×1
haskell-warp ×1
http ×1
https ×1
ld ×1
linux ×1
networking ×1
node-async ×1
node.js ×1
python-3.x ×1
ssl ×1