Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang 判断是否为 zip 文件

Golang 判断是否为 zip 文件

作者头像
恋喵大鲤鱼
发布于 2022-12-18 09:36:25
发布于 2022-12-18 09:36:25
1.5K00
代码可运行
举报
文章被收录于专栏:C/C++基础C/C++基础
运行总次数:0
代码可运行

1.压缩文件格式

压缩文件格式多如牛毛,但常见的有 4 种。

  • ZIP

ZIP 是一个历史悠久的压缩格式,也是事实上的压缩文件格式标准。

ZIP 是一个开放的压缩文件格式,所有任何压缩软件都可以创建 ZIP 文件。

ZIP 由 Phil Katz 于 1989 年设计,所以在文件头中我们可以看到 PK 的字样,这就是 Phil Katz 大名的首字母缩写。

  • GZ

GZ 名为 GNU ZIP,是一种类 UNIX 平台流行的压缩文件格式。

GZ 由 gzip 软件实现。gzip 是由 Jean-loup Gailly 和 Mark Adler 开发并于 1992 发布的一个自由软件,起初目的是用于取代 UNIX 系统上的压缩软件,并被 GNU 使用。

GZ 一般和 tar 配合使用,先将文件打包后再将其压缩。

  • RAR

RAR 是一种专利压缩文件格式,用于数据压缩与归档打包。

RAR 由俄罗斯人 Eugene Roshal 于 1993 年设计。RAR 的全称为 “Roshal ARchive”,中文意为“罗谢尔的归档”。

RAR 相比于 ZIP 有着更高的压缩比,但也存在着压缩和解压速度较慢的特点。

  • 7Z

7Z 是一种压缩文件格式,支持多种不同的数据压缩、加密和预处理算法。

7Z 格式最初是由 7-Zip 软件实现。7-Zip 由 Igor Pavlov 开发并于 1999 年基于 GNU LGPL 协议免费开源发布。

7Z 不仅比 ZIP 压缩比更高,而且相对于 RAR,占用更少的系统资源。

2.判断是否 ZIP 文件

判断一个文件是否是 ZIP 文件,可以根据 ZIP 开头的特殊表示来判断。

ZIP 文件开头的四个字节为文件头的签名 0x50 0x4b 0x03 0x04。其中 0x504b 即 PK,让我们永远记住 ZIP 之父 Phil Katz。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// IsZipFile reports file whether is a zip file.
func IsZipFile(filepath string) (bool, error) {
	f, err := os.Open(filepath)
	if err != nil {
		return false, err
	}
	defer f.Close()

	buf := make([]byte, 4)
	n, err := f.Read(buf)
	if err != nil {
		return false, err
	}
	if n < 4 {
		return false, nil
	}
	return bytes.Equal(buf, []byte("PK\x03\x04"))
}

3.go-huge-util

为了方便大家使用,以上相关代码已开源至 Github 工具库 go-huge-util,大家可使用 go mod 方式 import 然后使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import (
    "github.com/dablelv/go-huge-util/zip"
)

func main() {
	fmt.Println(zip.IsZipFile("a.zip"))
	fmt.Println(zip.IsZipFile("a.txt"))
	fmt.Println(zip.IsZipFile("b.txt"))
}

其中 a.zip 为事先准备好的 ZIP 文件,a.txt 为文本文件,b.txt 不存在。

运行输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
true <nil>
false <nil>
false open b.txt: The system cannot find the file specified.

参考文献

ZIP (file format) - Wikipedia Phil Katz - Wikipedia RAR (file format) - Wikipedia Eugene Roshal - Wikipedia 7z - Wikipedia 7-Zip - Wikipedia Igor Pavlov - Wikipedia Gzip - Wikipedia ZIP - File Format Docs github.com/dablelv/go-huge-util How can I determine if a file is a zip file? - Stack Overflow

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WGCNA仅仅是划分基因模块,其它都是附加分析
曾老师给我分享了一篇数据挖掘的文章,里面的WGCNA非常奇怪,我之前没见过这样的模块与表型的相关性热图
生信技能树
2023/09/04
1.6K0
WGCNA仅仅是划分基因模块,其它都是附加分析
三种转录组差异分析方法及区别你会了吗?
在做项目时,曾有小伙伴对我用edgeR进行差异分析筛选出的具体显著差异基因表示质疑,因为发表的文章清楚的说明某个基因是差异基因,但是我edgeR的分析结果并没有表明。在小伙伴的质疑下,我认真看了下文章,发现文章用的是DEseq2进行差异分析。值得注意的是该小伙伴关注的差异基因是一个离散比较大的基因,此处的离散较大可以理解为假定对照组为5,6,7;实验组则为14,13,3的情况。那为什么这个基因在edgeR分析下不是显著差异基因,然而在DEseq2的分析下是差异基因呢?这应该很大程度源于算法判定显著差异基因的区别。接着,我看了关于DEseq2与edgeR区别的描述,发现「edgeR与Deseq2都是基于负二项分布模型做的,两者处理同一组数据时,相同阈值处理大部分基因是一样的,但是也会有一部分基因会因为离散度不同导致差异不同」,如刚刚示例的基因离散度被DEseq2识别为差异,但是不被edgeR识别,所以两种算法获取的差异基因与数目是存在细微区别的。
生信菜鸟团
2022/10/31
6.2K1
三种转录组差异分析方法及区别你会了吗?
GEO数据挖掘之转录组测序数据流程-以GSE150392为例
这个包里可以画pca, 热图,火山图,韦恩图,具体每个图的算法,可以看生信技能树GEO芯片分析
生信技能树
2022/06/08
2.7K1
GEO数据挖掘之转录组测序数据流程-以GSE150392为例
比较不同流程(limma/voom,edgeR,DESeq2 )差异分析的区别
距离第一次听说生信已经十几年了,现在是邋遢大叔重新开始学代码,精力确实已不像从前,各位入坑还是要乘早。后来约莫在5年前,课题组当时有个RNA-Seq数据,lab meeting时听瑞典小哥在汇报DEGs筛选,当时感觉好是神奇。其实陆陆续续也有过学习的念头,但在对自己的各种纵容下,想法又逐渐隐没。直到2月前,机缘巧合参加了生信技能树培训,才进一步强化了自己学习生信技术的信念。
生信技能树
2021/01/05
5.3K0
初探mRNA、lncRNA联合分析之下游
虽然这个项目是在转录本水平上开展的研究,但既然我们拿到了基因表达矩阵,也干脆看一看一些基本情况,这个部分代码此处省略,基本上和后面的转录本水平对应代码,包括使用的封装函数,是一致的
生信菜鸟团
2023/08/23
8540
初探mRNA、lncRNA联合分析之下游
转录组差异分析—基本流程
读取RawCounts.csv文件,其文件形式如下图行名为ensembleid,列名为样本名称。
sheldor没耳朵
2024/07/29
3260
转录组差异分析—基本流程
GEO多数据集联合分析-文献复现
文献题目:基于生物信息学的新型铁死亡基因生物标志物和免疫浸润谱在糖尿病肾病中的应用Huang, Y., & Yuan, X. (2024). Novel ferroptosis gene biomarkers and immune infiltration profiles in diabetic kidney disease via bioinformatics. FASEB journal : official publication of the Federation of American Societies for Experimental Biology, 38(2), e23421. https://doi.org/10.1096/fj.202301357RR. IF: 4.8 Q1
用户11008504
2024/05/11
4902
TCGA数据整理-3
生信菜鸟团
2024/07/11
1600
TCGA数据整理-3
一起画个圈圈看差异基因
最近朋友看论文,看到了个展示差异基因的好看图,说想给自己的差异基因也来画一个,我研究了下,实现挺简单,现成的R包circlize 就可以做,那我们就一起来画一个圈圈吧!
生信菜鸟团
2022/04/08
1.1K0
一起画个圈圈看差异基因
并不需要得到去批次后的表达量矩阵
但是很多人理解的"去批次效应"(batch effect removal)这个操作应该是会输入一个表达量矩阵,然后输出一个表达量矩阵。其实在单细胞转录组数据分析里面并不是这样的,比如我们常见的harmony操作,它针对的就并不是原始的单细胞转录组表达量矩阵(几万个基因几万个细胞),而是pca分析结果(还是几万个细胞但是只有少量的pc)。这样的话,harmony操作后并没有修改我们的原始的单细胞转录组表达量矩阵,这一点可能会确实是让大家困惑。
生信技能树
2024/05/06
3380
并不需要得到去批次后的表达量矩阵
指定通路绘制gsea图热图和火山图
但是我们直接是对gsea分析结果的最终es值在可视化,所以是行是通路,列是癌症的,数值是gsea的es打分的矩阵。对初学者来说, 跳过了大量细节,所以跟这个教程会比较吃力,有粉丝就提问了希望可以对这些通路在在具体的癌症里面细化展示,比如绘制gsea图,热图和火山图。
生信技能树
2022/07/26
2.6K0
指定通路绘制gsea图热图和火山图
生信技能树GEO数据挖掘直播配套笔记
二代测序(RNA_seq):如果是counts 可选择limma的voom算法或者edgeR或者DESeq2。 如果是FPKM或TPM可选择limma,注意:edgeR和DESeq2只能处理count注意:count做差异分析计算上下调,FPKM或TPM进行下游可视化
生信技能树
2022/06/08
2.1K0
生信技能树GEO数据挖掘直播配套笔记
两分组差异分析的上下调基因跟PCA分析的主成分基因的交集如何
学员提出来了一个很有意思的问题, 就是表达量矩阵质量控制环节里面的PCA分析,可以看出来不同样品在二维图里面的距离,其中PC1是可以区分两个分组,如下所示:
生信技能树
2023/09/04
5770
两分组差异分析的上下调基因跟PCA分析的主成分基因的交集如何
生信技能树——GEO转录组RNA_seq_GSE162550
和生信技能树GEO转录组“GSE150392“分析类似,唯一区别就是在数据处理和ID转换这一环节略微有区别
生信技能树
2022/06/08
1.9K0
生信技能树——GEO转录组RNA_seq_GSE162550
GEO数据库中芯片数据分析思路
AnnoProbe是曾建明老师2020年开发的一款用于下载GEO数据集并注释的R包,收录在tinyarray里。 idmap##根据所给的GPL号,返回探针的注释 geoChina##根据所给的GSE号,下载对应的表达矩阵 annoGene##根据gencode中的GTF文件注释基因ID
小张小张
2023/05/25
2.1K0
TCGA数据库LUSC亚型批量差异分析
作业参考的文献:Integrated analysis reveals five potential ceRNA biomarkers in human lung adenocarcinoma
生信技能树
2020/03/11
1.7K0
基于count数据的基因差异表达分析万能代码
关于差异分析的文章中【一文就会TCGA数据库基因表达差异分析】其实有推送过,这篇文章目前为止,有近千人付费学习。
DoubleHelix
2022/06/13
4K0
基于count数据的基因差异表达分析万能代码
转录组测序结果分析
#没有任何提示就是成功了,如果有warningxx包不存在,用library检查一下。
叮当猫DDM
2024/03/19
3421
GEO数据库挖掘
输入数据是数值型矩阵/数据框,颜色的变化表示数值的大小。有相关性热图和差异基因热图。
叮当猫DDM
2023/07/16
8831
简单快速的GEO差异基因选取和绘制火山图
做GEO数据挖掘,有的时候,我们不需要做严格的分析,只想快速拿到差异基因,和简单的一张火山图。用来辅助其他的分析,如网络药理学,可以用以下的代码
sheldor没耳朵
2025/03/26
1740
简单快速的GEO差异基因选取和绘制火山图
推荐阅读
相关推荐
WGCNA仅仅是划分基因模块,其它都是附加分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验