最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Python2獲取中文文件名的編碼問題

 更新時間:2018年01月09日 08:46:45   作者:xiemanR  
下面小編就為大家分享一篇淺談Python2獲取中文文件名的編碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

問題:

Python2獲取包含中文的文件名是如果不轉(zhuǎn)碼會出現(xiàn)亂碼。

這里假設(shè)要測試的文件夾名為test,文件夾下有5個文件名包含中文的文件分別為:

Python性能分析與優(yōu)化.pdf

Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn).pdf

Python編程實(shí)戰(zhàn):運(yùn)用設(shè)計(jì)模式、并發(fā)和程序庫創(chuàng)建高質(zhì)量程序.pdf

流暢的Python.pdf

編寫高質(zhì)量Python代碼的59個有效方法.pdf

我們先不轉(zhuǎn)碼直接打印獲取到的文件名,代碼如下:

import os
for file in os.listdir('./test'):
 print(file)

輸出亂碼:

Python���ܷ������Ż�.pdf
Python���ݷ������ھ�ʵս.pdf
Python���ʵս���������ģʽ�������ͳ���ⴴ������������.pdf
������Python.pdf
�������Python�����59��������.pdf

解決:

先測試一下文件名的編碼,這里我們用到chardet模塊,安裝命令:

pip install chardet

用chardet.detect函數(shù)檢測一下文件名的編碼方式:

{'confidence': 0.99, 'encoding': 'GB2312'}
{'confidence': 0.99, 'encoding': 'GB2312'}
{'confidence': 0.99, 'encoding': 'GB2312'}
{'confidence': 0.73, 'encoding': 'windows-1252'}
{'confidence': 0.99, 'encoding': 'GB2312'}

可以看出編碼GB2312的置信度最大,下面我們用GB2312編碼來解碼文件名,代碼如下:

import os
import chardet
for file in os.listdir('./test'):
 r = file.decode('GB2312')
 print(r)

輸出:

Python性能分析與優(yōu)化.pdf

Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn).pdf

Python編程實(shí)戰(zhàn):運(yùn)用設(shè)計(jì)模式、并發(fā)和程序庫創(chuàng)建高質(zhì)量程序.pdf

流暢的Python.pdf

編寫高質(zhì)量Python代碼的59個有效方法.pdf

經(jīng)過編碼之后,文件名打印正確。

PS:chardet.detect檢測的字符串越長越準(zhǔn)確,越短越不準(zhǔn)確

這里還有一個問題是上面的代碼是在Windows下測試,Linux下文件名編碼是utf-8,為了兼容Windows和Linux,代碼需要修改一下,下面我們把代碼封裝到函數(shù)中:

# -*- coding: utf-8 -*-
import os

def get_filename_from_dir(dir_path):
 file_list = []
 if not os.path.exists(dir_path):
  return file_list
 for item in os.listdir(dir_path):
  basename = os.path.basename(item)
  # print(chardet.detect(basename)) # 找出文件名編碼,文件名包含有中文
  # windows下文件編碼為GB2312,linux下為utf-8
  try:
   decode_str = basename.decode("GB2312")
  except UnicodeDecodeError:
   decode_str = basename.decode("utf-8")
  file_list.append(decode_str)
 return file_list
# 測試代碼
r = get_filename_from_dir('./test')
for i in r:
 print(i)

先用GB2312解碼,如果出錯再用utf-8解碼,這樣就兼容了Windows和Linux(在Win7和Ubuntu16.04測試通過)。

以上這篇淺談Python2獲取中文文件名的編碼問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python處理CSV與List的轉(zhuǎn)換方法

    Python處理CSV與List的轉(zhuǎn)換方法

    下面小編就為大家分享一篇Python處理CSV與List的轉(zhuǎn)換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 使用Python的turtle模塊畫圖的方法

    使用Python的turtle模塊畫圖的方法

    這篇文章主要介紹了使用Python的turtle模塊畫圖的方法,涉及turtle簡介,運(yùn)動命令,畫筆控制命令的分享,以及具體操作的步驟,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 詳解利用django中間件django.middleware.csrf.CsrfViewMiddleware防止csrf攻擊

    詳解利用django中間件django.middleware.csrf.CsrfViewMiddleware防止csrf

    這篇文章主要介紹了詳解利用django中間件django.middleware.csrf.CsrfViewMiddleware防止csrf攻擊,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • TensorFlow在MAC環(huán)境下的安裝及環(huán)境搭建

    TensorFlow在MAC環(huán)境下的安裝及環(huán)境搭建

    小編在論壇中看到很多朋友在尋找TensorFlow的環(huán)境搭建圖文步驟以及安裝的具體流程,在此小編給大家整理了一篇非常詳細(xì)的圖文流程,希望能夠幫助到你。
    2017-11-11
  • 輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI

    輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI

    這篇文章主要教大家如何輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python將視頻轉(zhuǎn)換為全字符視頻

    python將視頻轉(zhuǎn)換為全字符視頻

    這篇文章主要為大家詳細(xì)介紹了Python將視頻轉(zhuǎn)換為全字符視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Matplotlib使用Cursor實(shí)現(xiàn)UI定位的示例代碼

    Matplotlib使用Cursor實(shí)現(xiàn)UI定位的示例代碼

    這篇文章主要介紹了Matplotlib使用Cursor實(shí)現(xiàn)UI定位的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python3.6之xlwt如何設(shè)置單元格對齊方式

    python3.6之xlwt如何設(shè)置單元格對齊方式

    這篇文章主要介紹了python3.6之xlwt如何設(shè)置單元格對齊方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python調(diào)用騰訊API進(jìn)行人像動漫化效果實(shí)例

    Python調(diào)用騰訊API進(jìn)行人像動漫化效果實(shí)例

    最近上網(wǎng)的時候看到了一個有趣的東西,叫做人物動漫化,嘗試著用python實(shí)現(xiàn)了,所以下面這篇文章主要給大家介紹了關(guān)于Python調(diào)用騰訊API進(jìn)行人像動漫化效果的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • PyTorch 實(shí)現(xiàn)L2正則化以及Dropout的操作

    PyTorch 實(shí)現(xiàn)L2正則化以及Dropout的操作

    這篇文章主要介紹了PyTorch 實(shí)現(xiàn)L2正則化以及Dropout的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評論

安徽省| 桐城市| 沁阳市| 广宗县| 眉山市| 南川市| 察哈| 上蔡县| 丹寨县| 石棉县| 布拖县| 彩票| 天台县| 万安县| 辰溪县| 东兰县| 遂宁市| 双柏县| 四会市| 平凉市| 托克逊县| 长汀县| 崇阳县| 青阳县| 建始县| 和林格尔县| 东乌珠穆沁旗| 镇平县| 太谷县| 大理市| 泰和县| 黄骅市| 岳普湖县| 南漳县| 西贡区| 六枝特区| 万载县| 玉溪市| 昔阳县| 湖南省| 榕江县|