我正在通过 API 将 Google Drive 电子表格加载到 PHP 中。该请求返回XLSX电子表格,我需要将其解压缩。为了节省我将响应写入临时文件然后调用,例如,zip_open()有没有一种方法可以将字符串传递给此类方法?
在这里,我还有几个文件夹(英语、印地语、日语)中的 Bookfolder。将英语、印地语、日语转换为 english.zip、hindi.zip 和 japanese.zip。一切正常,我将 zip 文件和文件夹保存在里面书夹,我正在用 java 做这件事。但是当我手动解压缩 zip 文件 ex:english.zip 时,右键单击此处的提取物,然后将错误显示为 UNEXPECTED END OF ARCHIVE。这是我的代码。
public void foldertToZip(File zipDeleteFile) {
//System.out.println(zipDeleteFile);
File directoryToZip = zipDeleteFile;
List<File> fileList = new ArrayList<>();
//System.out.println("---Getting references to all files in: " + directoryToZip.getCanonicalPath());
getAllFiles(directoryToZip, fileList);
//System.out.println("---Creating zip file");
writeZipFile(directoryToZip, fileList);
//System.out.println("---Done");
}
public static void getAllFiles(File dir, List<File> fileList) {
try {
File[] files = dir.listFiles();
for (File file : files) {
fileList.add(file);
if (file.isDirectory()) {
System.out.println("directory:" + file.getCanonicalPath());
getAllFiles(file, fileList);
} …Run Code Online (Sandbox Code Playgroud) 我是 python 中并行处理的新手。我在下面有一段代码,它遍历所有目录并解压缩所有 tar.gz 文件。然而,这需要相当多的时间。
import tarfile
import gzip
import os
def unziptar(path):
for root, dirs, files in os.walk(path):
for i in files:
fullpath = os.path.join(root, i)
if i.endswith("tar.gz"):
print 'extracting... {}'.format(fullpath)
tar = tarfile.open(fullpath, 'r:gz')
tar.extractall(root)
tar.close()
path = 'C://path_to_folder'
unziptar(path)
print 'tar.gz extraction completed'
Run Code Online (Sandbox Code Playgroud)
我一直在浏览一些关于 multiprocessing 和 joblib 包的帖子,但我仍然不清楚如何修改我的脚本以并行运行。任何帮助表示赞赏。
编辑:@tdelaney
感谢您的帮助,令人惊讶的是,修改后的脚本解压缩所有内容所需的时间是原来的两倍(60 分钟与原始脚本的 30 分钟相比)!
我查看了任务管理器,看起来虽然使用了多核,但 CPU 使用率很低。我不确定为什么会这样。
我试图弄清楚如何使用自定义版本的 fold(基本上用作 foldl)在 Haskell 中创建自定义解压缩函数,但我被卡住了。我可以得到它
unzip' :: [(a,b)] -> ([a],[b])
unzip' = fold (\x->([x!!0],[x!!1])) ([],[])
Run Code Online (Sandbox Code Playgroud)
但这会出错:
• Couldn't match expected type ‘[a]’
with actual type ‘(Integer, Integer)’
• In the first argument of ‘tail’, namely ‘(1, 2)’
In the expression: tail (1, 2)
In an equation for ‘it’: it = tail (1, 2)
• Relevant bindings include
it :: [a] (bound at <interactive>:114:1)
Run Code Online (Sandbox Code Playgroud)
据我所知,x是,(1,2)但我不确定如何将其进一步拆分为 1 和 2。这是我正在使用的 fold 函数:
fold :: (a -> b -> b) …Run Code Online (Sandbox Code Playgroud) 来自 API 的响应是一个包含三个小文件的压缩文件夹。我在一个字符串中得到了这个响应。我想显示其中一个文件的内容并将另一个文件存储在浏览器的本地存储中以备后用。我在解压时遇到问题。如何在不访问文件系统的情况下执行此操作?
fetch(URL,
{
method: 'GET',
headers: {
'API-KEY': API_Key,
},
}).then(response => response.text()).then(zippedFolderAsString => {
// Need to unzip
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试解压缩目录中的所有 zip,其中有时包含多层嵌套的 zip。我还想在提取的版本中保留原始的 zip 嵌套结构。我可以使用一层 zip 执行我想要的操作,但不能使用嵌套 zip 或子文件夹内的 zip。
例如,我想将起始文件夹中的所有内容如下所示:
[Starting Folder]
-Zip1.zip
--NestedZip1.zip
---text1.txt
--NestedZip2.zip
---text2.txt
-Zip2.zip
--[Subfolder1]
---Zip3.zip
----text3.txt
---Zip4.zip
----text4.txt
Run Code Online (Sandbox Code Playgroud)
并将所有内容提取到同一起始目录中的文件夹中:
[Starting Folder]
[Extracted Folder]
-Zip1 (folder)
--NestedZip1 (folder)
---text1.txt
--NestedZip2 (folder)
---text2.txt
-Zip2 (folder)
--[Subfolder1]
---Zip3 (folder)
----text3.txt
---Zip4 (folder)
----text4.txt
Run Code Online (Sandbox Code Playgroud)
现在我正在使用它来解压缩 MyGlobals.finalPathForWork (这是起始目录)中的所有文件,它可以工作,但只能解压缩一层 zip。我需要它以某种方式再次运行,以防第一层拉链中有拉链。
public static void MyMethod3()
{
string startPath = MyGlobals.finalPathForWork;
string extractPath = MyGlobals.finalPathForWork + @"\\Extracted\";
Directory.GetFiles(startPath, "*.zip", SearchOption.AllDirectories).ToList()
.ForEach(zipFilePath =>
{
var extractPathForCurrentZip = Path.Combine(extractPath, Path.GetFileNameWithoutExtension(zipFilePath));
if (!Directory.Exists(extractPathForCurrentZip))
{
Directory.CreateDirectory(extractPathForCurrentZip); …Run Code Online (Sandbox Code Playgroud) 我读过许多将 zip 文件提取到磁盘上的主题。但我有一个用例,需要将 zip 提取到内存中。ZIP 文件包含嵌套 zip 文件的列表。我在浏览了 Stack Overflow 上的几篇帖子后提出了这个问题。您能否分享任何包含有关如何在内存中解压缩文件的信息的帖子/链接?
我通过ftp将一些从linux主机文件中的文件带到我的窗口,当我检查文件编码时utf8没有bom
现在我需要将这些文件转换回ascii并发送我的其他Linux服务器
我压缩文件可以做我喜欢的事情
如果其文本文件和ut8格式解压缩而不是将其转换为ascii
当我解压缩文件时,我想进行转换
谢谢 ?
如何在C#中压缩(和解压缩)一个字节数组?
在少于100个元素的字节数组上使用zip/unzip是否有效?
我是Java的新手,正在尝试编写一个程序来解压缩目录中所有受密码保护的zip文件。我能够解压缩所有普通的zip文件(无密码),但是我不确定如何解压缩受密码保护的文件。注意:所有zip文件均具有相同的密码
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;
import java.util.zip.*;
public class Extraction {
// public Extraction() {
//
// try {
//
// ZipFile zipFile = new
// ZipFile("C:\\Users\\Desktop\\ZipFile\\myzip.zip");
//
// if (zipFile.isEncrypted()) {
//
// zipFile.setPassword("CLAIMS!");
// }
//
// List fileHeaderList = zipFile.getFileHeaders();
//
// for (int i = 0; i < fileHeaderList.size(); i++) {
// FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
//
// zipFile.extractFile(fileHeader, …Run Code Online (Sandbox Code Playgroud)