Python中文件名編碼問題的解決方案深度解析
引言
在跨平臺(tái)文件處理和國(guó)際化軟件開發(fā)中,文件名編碼問題是一個(gè)常見且棘手的挑戰(zhàn)。不同操作系統(tǒng)采用不同的默認(rèn)文件編碼方式:Windows通常使用UTF-16編碼但通過ANSI代碼頁與應(yīng)用程序交互,Linux和macOS則普遍采用UTF-8編碼。這種差異導(dǎo)致在處理包含非ASCII字符(如中文、日文、特殊符號(hào)等)的文件名時(shí),經(jīng)常出現(xiàn)亂碼、文件無法找到或操作失敗等問題。
Python作為一門跨平臺(tái)編程語言,提供了多種處理文件名編碼的技術(shù)和策略。從直接操作原始字節(jié)到智能編碼檢測(cè),從錯(cuò)誤恢復(fù)機(jī)制到統(tǒng)一編碼轉(zhuǎn)換,掌握這些技術(shù)對(duì)于開發(fā)健壯的跨平臺(tái)文件處理應(yīng)用至關(guān)重要。特別是在處理用戶上傳的文件、遍歷國(guó)際化的目錄結(jié)構(gòu)或構(gòu)建文件管理工具時(shí),正確處理文件名編碼問題顯得尤為重要。
本文將深入探討Python中繞過文件名編碼問題的各種方法,分析其原理、適用場(chǎng)景和注意事項(xiàng)。我們將從基礎(chǔ)的文件名表示方式講起,逐步深入到高級(jí)的編碼檢測(cè)和轉(zhuǎn)換技術(shù),并通過大量實(shí)際示例展示如何在不同場(chǎng)景下選擇和應(yīng)用最合適的解決方案。
一、理解文件名編碼問題的根源
1.1 不同操作系統(tǒng)的文件名編碼差異
import sys
import platform
def analyze_system_encoding():
"""分析當(dāng)前系統(tǒng)的文件名編碼情況"""
print(f"操作系統(tǒng): {platform.system()} {platform.release()}")
print(f"Python版本: {sys.version}")
print(f"默認(rèn)文件系統(tǒng)編碼: {sys.getfilesystemencoding()}")
print(f"默認(rèn)字符串編碼: {sys.getdefaultencoding()}")
# 檢查平臺(tái)特定信息
if platform.system() == "Windows":
import locale
print(f"Windows ANSI代碼頁: {locale.getpreferredencoding()}")
elif platform.system() == "Linux":
# 在Linux上檢查L(zhǎng)ANG環(huán)境變量
lang = os.environ.get('LANG', '未設(shè)置')
print(f"LANG環(huán)境變量: {lang}")
# 運(yùn)行分析
analyze_system_encoding()1.2 編碼問題的表現(xiàn)形式
文件名編碼問題通常表現(xiàn)為以下幾種形式:
- ??亂碼顯示??:文件名顯示為無意義的字符序列
- ??文件找不到??:即使文件確實(shí)存在,也無法通過路徑訪問
- ??操作失敗??:文件操作(復(fù)制、重命名、刪除等)因編碼問題失敗
- ??兼容性問題??:在不同系統(tǒng)間傳輸文件時(shí)出現(xiàn)名稱錯(cuò)誤
二、基礎(chǔ)解決方案:使用原始字節(jié)接口
2.1 使用字節(jié)路徑處理文件操作
Python的許多文件操作函數(shù)支持字節(jié)路徑,這可以繞過字符串編碼問題。
import os
import sys
def file_operations_with_bytes(path_bytes):
"""
使用字節(jié)路徑進(jìn)行文件操作
"""
try:
# 檢查文件是否存在
if os.path.exists(path_bytes):
print("文件存在")
# 獲取文件狀態(tài)
stat_info = os.stat(path_bytes)
print(f"文件大小: {stat_info.st_size} 字節(jié)")
# 讀取文件內(nèi)容
with open(path_bytes, 'rb') as f:
content = f.read(100) # 讀取前100字節(jié)
print(f"文件開頭: {content[:20]}...")
return True
else:
print("文件不存在")
return False
except Exception as e:
print(f"文件操作失敗: {e}")
return False
# 示例:處理可能包含特殊字符的文件名
def handle_problematic_filename():
# 假設(shè)我們有一個(gè)可能編碼有問題的文件名
original_path = "中文文件.txt" # 可能在某些環(huán)境下編碼錯(cuò)誤
try:
# 嘗試轉(zhuǎn)換為字節(jié)
if isinstance(original_path, str):
# 使用文件系統(tǒng)編碼轉(zhuǎn)換為字節(jié)
byte_path = original_path.encode(sys.getfilesystemencoding())
else:
byte_path = original_path
# 使用字節(jié)路徑進(jìn)行操作
success = file_operations_with_bytes(byte_path)
return success
except UnicodeEncodeError as e:
print(f"編碼失敗: {e}")
return False
# 使用示例
handle_problematic_filename()2.2 目錄遍歷中的字節(jié)路徑使用
import os
import sys
def list_directory_bytes(directory_path):
"""
使用字節(jié)路徑列出目錄內(nèi)容
"""
try:
# 確保路徑是字節(jié)格式
if isinstance(directory_path, str):
directory_bytes = directory_path.encode(sys.getfilesystemencoding())
else:
directory_bytes = directory_path
# 使用os.listdir的字節(jié)版本
with os.scandir(directory_bytes) as entries:
for entry in entries:
# entry.name 在Python 3.5+中是字符串,但我們可以獲取原始字節(jié)信息
print(f"條目: {entry.name}")
# 對(duì)于需要原始字節(jié)的場(chǎng)景,可以這樣處理
try:
# 嘗試以字符串方式處理
if entry.is_file():
print(f" 類型: 文件")
elif entry.is_dir():
print(f" 類型: 目錄")
except UnicodeError:
# 如果字符串處理失敗,使用字節(jié)方式
print(f" 類型: 未知(編碼問題)")
# 這里可以使用entry.path獲取字節(jié)路徑進(jìn)行進(jìn)一步操作
except FileNotFoundError:
print("目錄不存在")
except PermissionError:
print("沒有訪問權(quán)限")
except Exception as e:
print(f"列出目錄時(shí)出錯(cuò): {e}")
# 使用示例
list_directory_bytes("/path/to/directory")三、高級(jí)編碼處理策略
3.1 編碼檢測(cè)與轉(zhuǎn)換
import chardet
from pathlib import Path
class SmartFilenameDecoder:
"""
智能文件名解碼器
"""
def __init__(self):
self.common_encodings = ['utf-8', 'gbk', 'gb2312', 'shift_jis',
'iso-8859-1', 'windows-1252']
def detect_filename_encoding(self, byte_sequence):
"""
檢測(cè)字節(jié)序列的編碼
"""
# 首先嘗試常見編碼
for encoding in self.common_encodings:
try:
decoded = byte_sequence.decode(encoding)
# 簡(jiǎn)單的有效性檢查:是否包含可打印字符
if any(c.isprintable() or c.isspace() for c in decoded):
return encoding, decoded
except UnicodeDecodeError:
continue
# 使用chardet進(jìn)行智能檢測(cè)
try:
result = chardet.detect(byte_sequence)
if result['confidence'] > 0.7: # 置信度閾值
encoding = result['encoding']
decoded = byte_sequence.decode(encoding)
return encoding, decoded
except:
pass
# 最后嘗試:使用替換錯(cuò)誤處理
try:
decoded = byte_sequence.decode('utf-8', errors='replace')
return 'utf-8-with-replace', decoded
except:
return None, None
def safe_path_conversion(self, raw_path):
"""
安全路徑轉(zhuǎn)換
"""
if isinstance(raw_path, bytes):
encoding, decoded = self.detect_filename_encoding(raw_path)
if decoded:
return decoded
else:
# 無法解碼,返回可讀的字節(jié)表示
return f"byte_{raw_path.hex()[:16]}..."
else:
return raw_path
# 使用示例
decoder = SmartFilenameDecoder()
# 測(cè)試各種編碼
test_bytes = [
"中文文件.txt".encode('gbk'),
"日本語ファイル.txt".encode('shift_jis'),
"file with spécial chars.txt".encode('utf-8'),
b'\xff\xfe\x00\x00' # 無效字節(jié)序列
]
for i, byte_data in enumerate(test_bytes):
encoding, decoded = decoder.detect_filename_encoding(byte_data)
print(f"測(cè)試 {i+1}: 編碼={encoding}, 解碼結(jié)果={decoded}")3.2 處理混合編碼目錄
import os
from pathlib import Path
class MixedEncodingHandler:
"""
處理混合編碼目錄的工具類
"""
def __init__(self):
self.decoder = SmartFilenameDecoder()
def walk_mixed_encoding(self, root_dir):
"""
遍歷可能包含混合編碼的目錄
"""
root_path = Path(root_dir)
try:
with os.scandir(root_dir) as entries:
for entry in entries:
try:
# 嘗試正常處理
entry_name = entry.name
entry_path = entry.path
if entry.is_file():
print(f"文件: {entry_name}")
elif entry.is_dir():
print(f"目錄: {entry_name}/")
# 遞歸遍歷子目錄
self.walk_mixed_encoding(entry_path)
except UnicodeError:
# 遇到編碼問題,使用字節(jié)方式處理
print("遇到編碼問題,使用字節(jié)方式處理...")
self._handle_encoding_problem(entry)
except Exception as e:
print(f"遍歷目錄時(shí)出錯(cuò): {e}")
def _handle_encoding_problem(self, entry):
"""
處理編碼有問題的目錄條目
"""
try:
# 獲取原始字節(jié)信息(通過路徑)
byte_path = getattr(entry, '_name_bytes', None)
if byte_path is None:
# 對(duì)于某些系統(tǒng),可能需要其他方式獲取字節(jié)名稱
byte_path = entry.path.encode('latin-1', errors='replace')
# 嘗試解碼
decoded_name = self.decoder.safe_path_conversion(byte_path)
# 獲取文件類型
try:
if entry.is_file():
file_type = "文件"
elif entry.is_dir():
file_type = "目錄"
else:
file_type = "其他"
except:
file_type = "未知"
print(f"{file_type} (編碼問題): {decoded_name}")
except Exception as e:
print(f"處理編碼問題時(shí)出錯(cuò): {e}")
# 使用示例
handler = MixedEncodingHandler()
handler.walk_mixed_encoding("/path/to/problematic/directory")四、實(shí)戰(zhàn)應(yīng)用案例
4.1 文件同步工具中的編碼處理
import os
import shutil
from pathlib import Path
class EncodingAwareFileSync:
"""
支持編碼處理的文件同步工具
"""
def __init__(self, source_dir, target_dir):
self.source_dir = Path(source_dir)
self.target_dir = Path(target_dir)
self.decoder = SmartFilenameDecoder()
def sync_files(self):
"""
同步文件,處理編碼問題
"""
if not self.source_dir.exists():
print("源目錄不存在")
return False
# 確保目標(biāo)目錄存在
self.target_dir.mkdir(parents=True, exist_ok=True)
# 遍歷源目錄
for root, dirs, files in os.walk(self.source_dir):
# 處理相對(duì)路徑
rel_path = Path(root).relative_to(self.source_dir)
# 創(chuàng)建對(duì)應(yīng)的目標(biāo)目錄
target_root = self.target_dir / rel_path
target_root.mkdir(exist_ok=True)
# 處理文件
for file in files:
source_file = Path(root) / file
target_file = target_root / file
self._sync_single_file(source_file, target_file)
return True
def _sync_single_file(self, source_file, target_file):
"""
同步單個(gè)文件
"""
try:
# 正常情況下的同步
if not target_file.exists() or \
source_file.stat().st_mtime > target_file.stat().st_mtime:
shutil.copy2(source_file, target_file)
print(f"同步: {source_file} -> {target_file}")
except UnicodeError:
# 處理編碼問題
self._handle_encoding_sync(source_file, target_file)
except Exception as e:
print(f"同步文件時(shí)出錯(cuò): {source_file} - {e}")
def _handle_encoding_sync(self, source_file, target_file):
"""
處理編碼有問題的文件同步
"""
try:
# 獲取字節(jié)路徑
source_bytes = str(source_file).encode('latin-1', errors='replace')
target_bytes = str(target_file).encode('latin-1', errors='replace')
# 使用字節(jié)路徑操作
with open(source_bytes, 'rb') as src:
content = src.read()
with open(target_bytes, 'wb') as dst:
dst.write(content)
# 復(fù)制元數(shù)據(jù)
stat = os.stat(source_bytes)
os.utime(target_bytes, (stat.st_atime, stat.st_mtime))
decoded_name = self.decoder.safe_path_conversion(source_bytes)
print(f"同步(編碼處理): {decoded_name}")
except Exception as e:
print(f"處理編碼同步時(shí)出錯(cuò): {e}")
# 使用示例
sync_tool = EncodingAwareFileSync("/source/directory", "/target/directory")
sync_tool.sync_files()4.2 文件名編碼修復(fù)工具
import os
import re
from pathlib import Path
class FilenameEncodingFixer:
"""
文件名編碼修復(fù)工具
"""
def __init__(self):
self.decoder = SmartFilenameDecoder()
self.encoding_stats = {}
def fix_directory_encodings(self, directory_path, dry_run=True):
"""
修復(fù)目錄中的文件名編碼問題
"""
dir_path = Path(directory_path)
if not dir_path.exists() or not dir_path.is_dir():
print("目錄不存在或不是目錄")
return False
fixed_count = 0
problem_count = 0
# 遍歷目錄
for item in dir_path.iterdir():
original_name = item.name
original_path = item
try:
# 測(cè)試文件名是否可正常處理
test = str(original_name)
# 如果正常,跳過
if self._is_valid_filename(original_name):
continue
except UnicodeError:
# 發(fā)現(xiàn)編碼問題
problem_count += 1
if not dry_run:
# 嘗試修復(fù)
success = self._fix_single_filename(original_path)
if success:
fixed_count += 1
else:
print(f"發(fā)現(xiàn)編碼問題: {original_name}")
print(f"發(fā)現(xiàn) {problem_count} 個(gè)編碼問題,修復(fù) {fixed_count} 個(gè)")
return True
def _is_valid_filename(self, filename):
"""
檢查文件名是否有效
"""
try:
# 嘗試編碼和解碼
encoded = filename.encode('utf-8')
decoded = encoded.decode('utf-8')
# 檢查是否包含非法字符(根據(jù)操作系統(tǒng))
if os.name == 'nt': # Windows
invalid_chars = r'[<>:"/\\|?*]'
else: # Unix/Linux
invalid_chars = r'[/]'
if re.search(invalid_chars, filename):
return False
return True
except UnicodeError:
return False
def _fix_single_filename(self, file_path):
"""
修復(fù)單個(gè)文件名
"""
try:
# 獲取原始字節(jié)名稱
original_bytes = str(file_path).encode('latin-1', errors='replace')
# 嘗試檢測(cè)正確編碼
encoding, decoded_name = self.decoder.detect_filename_encoding(original_bytes)
if not decoded_name:
print(f"無法修復(fù): {file_path}")
return False
# 生成新路徑
parent_dir = file_path.parent
new_path = parent_dir / decoded_name
# 避免名稱沖突
counter = 1
while new_path.exists():
stem = file_path.stem
suffix = file_path.suffix
new_name = f"{stem}_{counter}{suffix}"
new_path = parent_dir / new_name
counter += 1
# 重命名文件
file_path.rename(new_path)
print(f"修復(fù): {file_path.name} -> {new_path.name}")
return True
except Exception as e:
print(f"修復(fù)文件名時(shí)出錯(cuò): {file_path} - {e}")
return False
# 使用示例
fixer = FilenameEncodingFixer()
# 先進(jìn)行干運(yùn)行(不實(shí)際修改)
fixer.fix_directory_encodings("/path/to/fix", dry_run=True)
# 實(shí)際修復(fù)
fixer.fix_directory_encodings("/path/to/fix", dry_run=False)五、跨平臺(tái)兼容性處理
統(tǒng)一文件名處理框架
import os
import sys
from pathlib import Path
class CrossPlatformFilenameHandler:
"""
跨平臺(tái)文件名處理框架
"""
def __init__(self):
self.system_encoding = sys.getfilesystemencoding()
self.is_windows = os.name == 'nt'
def normalize_filename(self, filename):
"""
規(guī)范化文件名,確??缙脚_(tái)兼容
"""
if isinstance(filename, bytes):
# 字節(jié)文件名,需要解碼
try:
decoded = filename.decode(self.system_encoding)
return self._sanitize_filename(decoded)
except UnicodeDecodeError:
# 解碼失敗,使用安全轉(zhuǎn)換
return self._safe_byte_conversion(filename)
else:
# 字符串文件名,進(jìn)行清理
return self._sanitize_filename(filename)
def _sanitize_filename(self, filename):
"""
清理文件名,移除非法字符
"""
# 定義非法字符(根據(jù)操作系統(tǒng))
if self.is_windows:
invalid_chars = r'[<>:"/\\|?*]'
max_length = 255 # Windows文件名長(zhǎng)度限制
else:
invalid_chars = r'[/]'
max_length = 255 # 一般Unix限制
# 移除非法字符
import re
sanitized = re.sub(invalid_chars, '_', filename)
# 處理保留名稱(Windows)
if self.is_windows:
reserved_names = {'CON', 'PRN', 'AUX', 'NUL',
'COM1', 'COM2', 'COM3', 'COM4', 'COM5',
'COM6', 'COM7', 'COM8', 'COM9',
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5',
'LPT6', 'LPT7', 'LPT8', 'LPT9'}
if sanitized.upper() in reserved_names:
sanitized = f"_{sanitized}"
# 截?cái)噙^長(zhǎng)文件名
if len(sanitized) > max_length:
stem = Path(sanitized).stem
suffix = Path(sanitized).suffix
# 保留后綴,截?cái)嘀鞲?
if len(suffix) < max_length:
stem_max = max_length - len(suffix)
sanitized = stem[:stem_max] + suffix
else:
sanitized = sanitized[:max_length]
return sanitized
def _safe_byte_conversion(self, byte_filename):
"""
安全轉(zhuǎn)換字節(jié)文件名
"""
try:
# 嘗試常見編碼
for encoding in ['utf-8', 'gbk', 'iso-8859-1']:
try:
decoded = byte_filename.decode(encoding)
return self._sanitize_filename(decoded)
except UnicodeDecodeError:
continue
# 所有編碼都失敗,使用十六進(jìn)制表示
hex_str = byte_filename.hex()[:16]
return f"unknown_{hex_str}"
except Exception:
return "invalid_filename"
def create_cross_platform_path(self, *path_parts):
"""
創(chuàng)建跨平臺(tái)兼容的路徑
"""
normalized_parts = []
for part in path_parts:
if isinstance(part, Path):
part = str(part)
normalized = self.normalize_filename(part)
normalized_parts.append(normalized)
# 使用pathlib構(gòu)建路徑
path = Path(normalized_parts[0])
for part in normalized_parts[1:]:
path = path / part
return path
# 使用示例
filename_handler = CrossPlatformFilenameHandler()
# 測(cè)試各種文件名
test_names = [
"正常文件.txt",
"file with spaces.doc",
"包含/非法/字符.txt", # Unix非法
"包含:非法字符.txt", # Windows非法
b'\xff\xfeinvalid bytes'.hex() # 無效字節(jié)
]
for name in test_names:
normalized = filename_handler.normalize_filename(name)
print(f"原始: {name} -> 規(guī)范化: {normalized}")六、最佳實(shí)踐與總結(jié)
6.1 文件名編碼處理最佳實(shí)踐
- ??始終明確編碼??:在文件操作中明確指定編碼方式,避免依賴系統(tǒng)默認(rèn)設(shè)置
- ??使用字節(jié)接口??:對(duì)于可能包含編碼問題的文件,使用字節(jié)路徑進(jìn)行操作
- ??實(shí)施防御性編程??:假設(shè)所有文件名都可能包含編碼問題,添加適當(dāng)?shù)腻e(cuò)誤處理
- ??統(tǒng)一編碼策略??:在項(xiàng)目中統(tǒng)一使用UTF-8編碼處理文件名
- ??記錄編碼信息??:在處理文件時(shí)記錄使用的編碼方式,便于后續(xù)調(diào)試
6.2 性能與可靠性平衡
import time
from functools import wraps
def timing_decorator(func):
"""執(zhí)行時(shí)間測(cè)量裝飾器"""
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} 執(zhí)行時(shí)間: {end_time - start_time:.4f}秒")
return result
return wrapper
class OptimizedEncodingHandler(CrossPlatformFilenameHandler):
"""
優(yōu)化的編碼處理器,平衡性能與可靠性
"""
def __init__(self):
super().__init__()
self.encoding_cache = {} # 編碼檢測(cè)緩存
@timing_decorator
def batch_process_files(self, file_list):
"""
批量處理文件列表
"""
results = []
for file_path in file_list:
try:
# 使用緩存優(yōu)化重復(fù)文件的處理
if file_path in self.encoding_cache:
result = self.encoding_cache[file_path]
else:
result = self.normalize_filename(file_path)
self.encoding_cache[file_path] = result
results.append(result)
except Exception as e:
results.append(f"error:{e}")
return results
# 使用示例
optimized_handler = OptimizedEncodingHandler()
# 生成測(cè)試文件列表
test_files = ["測(cè)試文件.txt"] * 1000 + ["another_file.pdf"] * 500
# 批量處理
results = optimized_handler.batch_process_files(test_files)
print(f"處理 {len(results)} 個(gè)文件")總結(jié)
文件名編碼問題是Python跨平臺(tái)文件處理中的一個(gè)復(fù)雜但重要的話題。通過本文的探討,我們了解了問題的根源、各種解決方案以及實(shí)際應(yīng)用技巧。
??關(guān)鍵要點(diǎn)總結(jié):??
1.??問題根源??:不同操作系統(tǒng)使用不同的文件編碼方式是問題的根本原因
2.??解決方案??:
- 使用字節(jié)接口繞過字符串編碼問題
- 實(shí)施智能編碼檢測(cè)和轉(zhuǎn)換
- 采用統(tǒng)一的文件名規(guī)范化策略
3.??性能考量??:通過緩存和批量處理優(yōu)化編碼檢測(cè)性能
4.??錯(cuò)誤處理??:健全的錯(cuò)誤處理機(jī)制是生產(chǎn)環(huán)境應(yīng)用的必備條件
5.??跨平臺(tái)兼容??:考慮不同操作系統(tǒng)的文件名限制和特殊規(guī)則
??最佳實(shí)踐建議:??
- 在生產(chǎn)代碼中始終處理可能的編碼異常
- 對(duì)于國(guó)際化的應(yīng)用,統(tǒng)一使用UTF-8編碼
- 實(shí)施文件名規(guī)范化,確??缙脚_(tái)兼容性
- 使用pathlib等現(xiàn)代庫(kù)進(jìn)行文件路徑操作
- 在性能敏感的場(chǎng)景中使用緩存和批量處理
通過掌握這些技術(shù)和最佳實(shí)踐,開發(fā)者可以構(gòu)建出健壯、可靠且跨平臺(tái)兼容的文件處理應(yīng)用程序,能夠妥善處理各種文件名編碼問題,為用戶提供更好的體驗(yàn)。
以上就是Python中文件名編碼問題的解決方案深度解析的詳細(xì)內(nèi)容,更多關(guān)于Python文件名編碼問題的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python logging 日志的級(jí)別調(diào)整方式
今天小編就為大家分享一篇python logging 日志的級(jí)別調(diào)整方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
基于Python實(shí)現(xiàn)個(gè)人手機(jī)定位分析
TransBigData是一個(gè)為交通時(shí)空大數(shù)據(jù)處理、分析和可視化而開發(fā)的Python包。本文就來用它實(shí)現(xiàn)個(gè)人手機(jī)定位分析,感興趣的小伙伴可以了解一下2023-04-04
使用python爬蟲實(shí)現(xiàn)抓取動(dòng)態(tài)加載數(shù)據(jù)
這篇文章主要給大家介紹了如何用python爬蟲抓取豆瓣電影“分類排行榜”中的電影數(shù)據(jù),比如輸入“犯罪”則會(huì)輸出所有犯罪影片的電影名稱、評(píng)分,文中通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
python實(shí)現(xiàn)秒殺商品的微信自動(dòng)提醒功能(代碼詳解)
這篇文章主要介紹了python實(shí)現(xiàn)秒殺商品的微信自動(dòng)提醒功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Python使用百度通用API進(jìn)行翻譯實(shí)現(xiàn)
本文主要介紹了Python使用百度通用API進(jìn)行翻譯實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python爬蟲實(shí)戰(zhàn)演練之采集糗事百科段子數(shù)據(jù)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python采集糗事百科段子的數(shù)據(jù),大家可以在過程中查缺補(bǔ)漏,提升水平2021-10-10
Python3.12內(nèi)置的71個(gè)函數(shù)匯總(按用途分類)
Python 的強(qiáng)大之處在于它自帶了豐富的工具箱,截至 Python 3.12 版本,官方提供了 71 個(gè)內(nèi)置函數(shù),這些函數(shù)無需 import 任何模塊即可直接使用,為了方便查閱和記憶,本文將這 71 個(gè)函數(shù)按功能分類2026-01-01
詳解tensorflow實(shí)現(xiàn)遷移學(xué)習(xí)實(shí)例
本篇文章主要介紹了詳解tensorflow實(shí)現(xiàn)遷移學(xué)習(xí)實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02

