具有多个扩展名的文件是指文件名中包含多个点号(.)分隔的扩展部分,例如"report.tar.gz"或"document.backup.docx"。这种命名方式通常用于表示文件的层级类型或版本信息。
.tar.gz
(先用tar打包再用gzip压缩).bak.txt
或.old.docx
file.v2.pdf
.tmp.csv
.min.js
或.prod.config
using System;
using System.IO;
class Program
{
static void Main()
{
string directoryPath = @"C:\YourDirectory";
// 获取所有文件
string[] allFiles = Directory.GetFiles(directoryPath);
// 筛选具有多个扩展名的文件
var multiExtFiles = Array.FindAll(allFiles, file =>
Path.GetFileName(file).Split('.').Length > 2);
foreach (var file in multiExtFiles)
{
Console.WriteLine(file);
}
}
}
import os
import re
directory = '/path/to/directory'
pattern = re.compile(r'^.*\..+\..+$') # 匹配至少两个点号的文件名
multi_ext_files = [
f for f in os.listdir(directory)
if os.path.isfile(os.path.join(directory, f)) and pattern.match(f)
]
for file in multi_ext_files:
print(file)
原因:许多编程语言的Path类默认只识别最后一个点号后的部分作为扩展名。
解决方案:
原因:未按正确顺序解压多层压缩文件。
解决方案:
import tarfile
import gzip
import shutil
# 处理.tar.gz文件示例
def extract_tar_gz(file_path, extract_to):
with gzip.open(file_path, 'rb') as gz_file:
with tarfile.open(fileobj=gz_file, mode='r:') as tar_file:
tar_file.extractall(extract_to)
原因:字符串排序会将"v10"排在"v2"前面。
解决方案:
import re
def natural_sort_key(s):
return [int(text) if text.isdigit() else text.lower()
for text in re.split('([0-9]+)', s)]
files = ['report.v1.pdf', 'report.v10.pdf', 'report.v2.pdf']
sorted_files = sorted(files, key=natural_sort_key)
# 结果: ['report.v1.pdf', 'report.v2.pdf', 'report.v10.pdf']
没有搜到相关的文章