如何仅列出zip存档中的文件夹?这将列出存档中的每个folfder和文件:
import zipfile
file = zipfile.ZipFile("samples/sample.zip", "r")
for name in file.namelist():
print name
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在使用NodeJS服务器中的express模块生成一个zip文件.快递服务器正在响应许多请求,所以我知道这是正确设置的,但是我在生成zip文件并将其作为可下载文件发回时遇到了问题.
我不想保存文件,然后告诉Express将该文件作为下载发送,我只想将zip文件作为内存中的数据发送.这是我到目前为止所拥有的.
function buildZipFile(data, filename) {
var zip = new require('node-zip')();
zip.file(filename, data, { base64: false });
return zip.generate();
}
var data = buildZipFile('hello world', 'hello.txt');
res.set('Content-Type', 'application/zip')
res.set('Content-Disposition', 'attachment; filename=file.zip');
res.set('Content-Length', data.length);
res.end(data, 'binary');
return;
Run Code Online (Sandbox Code Playgroud)
该文件将返回,但windows unzip或7zip都无法打开存档,就好像它已损坏一样.有什么建议?先感谢您.
我正在寻找一种方法将zipfile发送到客户端,该方法是从请求响应生成的.在此示例中,我将一个JSON字符串发送到url,该url返回已转换的JSON字符串的zip文件.
@app.route('/sendZip', methods=['POST'])
def sendZip():
content = '{"type": "Point", "coordinates": [-105.01621, 39.57422]}'
data = {'json' : content}
r = requests.post('http://ogre.adc4gis.com/convertJson', data = data)
if r.status_code == 200:
zipDoc = zipfile.ZipFile(io.BytesIO(r.content))
return Response(zipDoc,
mimetype='application/zip',
headers={'Content-Disposition':'attachment;filename=zones.zip'})
Run Code Online (Sandbox Code Playgroud)
但是我的zip文件是空的,而烧瓶返回的错误是
Debugging middleware caught exception in streamed response at a point where response
headers were already sent
Run Code Online (Sandbox Code Playgroud) 我有一个程序使用写入电子表格openpyxl.执行程序后,单元格按预期填充,但电子表格会损坏.Excel修复电子表格,然后我可以再次查看它.
import openpyxl
from openpyxl import load_workbook
amounts, row = [1, 2, 3, 4, 5], 2
book = load_workbook("output.xlsx")
sheet = book.active
for i, value in enumerate(amounts):
sheet.cell(column=i+1, row=row, value=value)
print ("Sheet updating complete.")
book.save("output.xlsx")
Run Code Online (Sandbox Code Playgroud)
我尝试使用Microsoft的Open XML SDK Productivity Tool来比较好的和坏的文件,并注意到它styles.xml丢失了.我尝试使用我从另一个问题中获得的以下源代码复制它,但它并没有为我解决问题.
import zipfile
with zipfile.ZipFile('outputcopy.xlsx', 'r') as zgood:
styles_xml = zgood.read('xl/styles.xml')
with zipfile.ZipFile('output.xlsx', 'a') as zbad:
zbad.writestr('xl/styles.xml', styles_xml)
Run Code Online (Sandbox Code Playgroud)
我可以从Excel生成的修复日志中确认,问题出在哪里xl/styles.xml.我需要将这个xml文件从好副本复制到坏副本.
如何xl/styles.xml复制文件以便程序可以在不损坏的情况下运行output.xlsx?
我已经再次尝试解决这个问题.在styles.xml无法从不同的Excel文件中复制的概率; 我styles.xml从前开output.xlsx过book.save("output.xlsx").保存之后,我会styles.xml …
如何使用 vb.net 和 .net framework 4.0 压缩文件夹。我可以通过使用框架 4.5 中提供的 ZipFile 类来做到这一点,但我只需要使用框架 4.0,也不需要第三方库。请帮忙
我在Linux服务器上有很多压缩文件,每个文件包含多个文本文件.
我想要的是提取一些文本文件,这些文件在压缩文件中具有相同的名称并将其保存为文件夹; 我正在为每个压缩文件创建一个文件夹,并将文本文件解压缩到它.我需要将父压缩文件夹名称添加到文件名的末尾,并将所有文本文件保存在一个目录中.例如,如果压缩文件夹是March132017.zip并且我提取了holding.txt,那么我的文件名将是holding_march13207.txt.
我的问题是我无法更改提取文件的名称.如果你能提出建议,我将不胜感激.
import os
import sys
import zipfile
os.chdir("/feeds/lipper/emaxx")
pwkwd = "/feeds/lipper/emaxx"
for item in os.listdir(pwkwd): # loop through items in dir
if item.endswith(".zip"): # check for ".zip" extension
file_name = os.path.abspath(item) # get full path of files
fh = open(file_name, "rb")
zip_ref = zipfile.ZipFile(fh)
filelist = 'ISSUERS.TXT' , 'SECMAST.TXT' , 'FUND.TXT' , 'HOLDING.TXT'
for name in filelist :
try:
outpath = "/SCRATCH/emaxx" + "/" + os.path.splitext(item)[0]
zip_ref.extract(name, outpath)
except KeyError:
{}
fh.close()
Run Code Online (Sandbox Code Playgroud) 如何.zip使用提供的 node.js zlib模块压缩一个/多个文件并保存到扩展文件中?我想出了如何.gz使用 gzip保存,如下所示:
const gzip = zlib.createGzip();
const fs = require('fs');
const input = fs.createReadStream('myfile.txt');
const out = fs.createWriteStream('myfile.txt.gz');
input.pipe(gzip).pipe(out);
Run Code Online (Sandbox Code Playgroud) 该函数numpy.savez()允许将numpy对象存储在文件中.将同一对象存储在两个文件中会产生两个不同的文件:
import numpy as np
some_array = np.arange(42)
np.savez('/tmp/file1', some_array=some_array)
np.savez('/tmp/file2', some_array=some_array)
Run Code Online (Sandbox Code Playgroud)
这两个文件不同:
$ diff /tmp/file1.npz /tmp/file2.npz
Binary files /tmp/file1.npz and /tmp/file2.npz differ
Run Code Online (Sandbox Code Playgroud)
为什么文件不相同?是否包含一些随机行为,文件名或时间戳?这可以解决或修复吗?(这是一个错误?)
请注意,情况并非如此np.save().生成的文件np.save()对于相同的输入是相同的.所以我猜这与数据的压缩有关.
AFAICS只有两位不同:
$ xxd /tmp/file1.npz > /tmp/file1.hex
$ xxd /tmp/file2.npz > /tmp/file2.hex
$ diff -u0 /tmp/file1.hex /tmp/file2.hex
--- /tmp/file1.hex 2018-03-13 13:39:12.235897095 +0100
+++ /tmp/file2.hex 2018-03-13 13:39:08.743927081 +0100
@@ -1 +1 @@
-0000000: 504b 0304 1400 0000 0000 ce6c 6d4c 9c9d PK.........lmL..
+0000000: 504b 0304 1400 0000 0000 cf6c 6d4c 9c9d …Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用 tje 请求库从 URL 获取 zip 文件的脚本。该 zip 文件包含一个 csv 文件。我正在尝试读取该 csv 文件而不保存它。但是在解析时它给了我这个错误:_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
import csv
import requests
from io import BytesIO, StringIO
from zipfile import ZipFile
response = requests.get(url)
zip_file = ZipFile(BytesIO(response.content))
files = zip_file.namelist()
with zip_file.open(files[0]) as csvfile:
csvreader = csv.reader(csvfile)
# _csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
for row in csvreader:
print(row)
Run Code Online (Sandbox Code Playgroud) 我们的ZIP文件大小为5-10GB.典型的ZIP文件有5-10个内部文件,每个文件大小为1-5 GB,未压缩.
我有一套很好的Python工具来读取这些文件.基本上,我可以打开文件名,如果有ZIP文件,工具搜索ZIP文件,然后打开压缩文件.这一切都相当透明.
我想将这些文件存储在Amazon S3中作为压缩文件.我可以获取S3文件的范围,因此应该可以获取ZIP中心目录(它是文件的末尾,所以我只能读取最后的64KiB),找到我想要的组件,下载它,然后直接流到调用过程.
所以我的问题是,我如何通过标准的Python ZipFile API来做到这一点?没有记录如何用支持POSIX语义的任意对象替换文件系统传输.如果不重写模块,这可能吗?