Python常用語句


遍歷文件

方式一

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

方式二

from os import walk

f = []
for (dirpath, dirnames, filenames) in walk(mypath):
    f.extend(filenames)
    break

參考How to list all files of a directory?

以文件的保存的編碼打開文件

有時候在打開文件的時候,不知道文件的編碼。這個時候就需要先探測到文件的編碼,然后再以探測到的文件編碼打開。但是在Python中並沒有相關的包可以用來獲取文件的編碼,可以借助於第三方的庫chardet

安裝chardet

pip install chardet

打開文件

with open(filpath,'rb') as file:
    rawdata = file.read()
    result = chardet.detect(rawdata)
    charenc = result['encoding']
	content = rawdata.decode(charenc,'ignore')

更新pip

更新pip3

pip3 install --upgrade pip

更新pip2

pip2 install --upgrade pip

得到所有的字符

很多時候需要使用Python得到所有字符,包括特殊字符。

import string
string.printable

最后的結果為

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;?@[\\]^_`{|}~ \t\n\r\x0b\x0c

連續數字

有時候需要生成等長的數字序列,如001,002一直到100
使用常規的range只能生成普通的1,2,3這樣的字符串。
可以使用zfill()函數來完成

num = [str(i) for i in range(100)]
new_nums = []
for i in num:
    i = i.zfill(3)
    new_nums.append(i)
print(new_nums)

其中的zfill(3)就是表示需要生成三位數的數字
最后的結果就是:

將dict以json格式保存

import json
with open('result.json', 'w') as fp:
    json.dump(sample, fp)

Flatten (an irregular) list of lists

不知道如何翻譯成為中文,但是看代碼示例就應該知道了。

簡單的方式(規則的list)

import itertools
list2d = [[1, 2, 3], [4, 5, 6], [7], [8, 9,],[12,]]
merged = list(itertools.chain.from_iterable(list2d))
print(merged)
#output:[1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

可以看到list2d是一個二級list,如果出現3級list,那么上述的方法就會失敗。

import itertools
list2d = [[1, 2, 3,[11,12,13]],[4,5,6,[14,15,16]]]
merged = list(itertools.chain.from_iterable(list2d))
print(merged)
#output:[1, 2, 3, [11, 12, 13], 4, 5, 6, [14, 15, 16]]

說明使用itertools.chain.from_iterable只能解壓兩層

遞歸的方式

面對不同形式的list,最好的方式是使用遞歸來解決。

def flatten(x):
    import collections
    if isinstance(x, collections.Iterable):
        return [a for i in x for a in flatten(i)]
    else:
        return [x]

def get_flattern_List():
    list2d = [[1, 2, 3], [4, 5, 6], [7], [8, 9, [10, 11,[12,13]]]]
    result = flatten(list2d)
    print(result)
#output:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

使用遞歸的方式,可以解決不規則的list的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM