<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          美女面試官問(wèn)我Python如何優(yōu)雅的創(chuàng)建臨時(shí)文件,我的回答....

          共 2056字,需瀏覽 5分鐘

           ·

          2020-06-06 23:20


          f9ca09f6ea770455430fc92edcf2f7f1.webp

          f2da7e5fc52d16be7188bf8cc160dec8.webp

          努力自學(xué)的小P

          本故事純屬虛構(gòu),如有巧合,他們故事里的美女面試官也肯定沒(méi)有我的美,請(qǐng)自行腦補(bǔ)...

          小P像多數(shù)Python自學(xué)者一樣,苦心鉆研小半年,一朝出師投簡(jiǎn)歷。這不,一家招聘初級(jí)Python開(kāi)發(fā)工程師的公司,發(fā)來(lái)了面試邀請(qǐng),小P趕緊準(zhǔn)備行頭欣然赴約。

          f2da7e5fc52d16be7188bf8cc160dec8.webp

          面試開(kāi)場(chǎng)


          接待他的是一位美女面試官,小P決定要好好表現(xiàn)下。經(jīng)過(guò)一輪套路的自我介紹,來(lái)到技術(shù)面試的環(huán)節(jié)。美女面試官問(wèn)了這么一道題:

          假設(shè)你正在編寫(xiě)的方法,需要每次執(zhí)行時(shí),在服務(wù)器上創(chuàng)建一個(gè)臨時(shí)文件書(shū)寫(xiě)部分內(nèi)容,而后將該文件的對(duì)象傳輸給第三方的函數(shù),待第三方獲取到你文本內(nèi)的數(shù)據(jù),最后執(zhí)行對(duì)該臨時(shí)文件的刪除操作。請(qǐng)?jiān)诩埳贤晟拼a:

          import?os

          def?three_func(file_object=None):
          ????data?=?file_object.read()
          ????final_data?=?data.decode()?if?isinstance(data,?bytes)?else?data
          ????print(f'read?file?info:{final_data}')

          def?make_temp_file():
          ?...
          ????#?call?three_func
          ????three_func(_tmp_file)
          ?...

          make_temp_file()


          f2da7e5fc52d16be7188bf8cc160dec8.webp

          小P作答


          小P一想,這個(gè)美女還挺心機(jī)的,要求邊讀邊寫(xiě),但這可難不倒我,so easy!于是開(kāi)始了他的“表演”:

          def?make_temp_file():
          ????_base_dir?=?os.path.dirname(os.path.realpath(__file__))
          ????_tmp_file?=?os.path.join(_base_dir,?'tmp_file.txt')
          ????print(_tmp_file)
          ????with?open(_tmp_file,?'w+')?as?f:
          ????????f.write("something")
          ????????f.seek(0)
          ????????#?call?three_func
          ????????three_func(f)
          ????os.remove(_tmp_file)

          output:
          D:\Codes_Repository\PythonArticles\tmp_file.txt
          read?file?info:something

          寫(xiě)完后,小P自信的給了美女面試官一個(gè)微笑。通過(guò)小P的代碼,可以看到他對(duì)文件的讀寫(xiě)還是有一定了解的。知道w+的方式可以同時(shí)支持讀寫(xiě)操作,并通過(guò)seek的指針偏移,來(lái)達(dá)到讀取已寫(xiě)入內(nèi)容的效果,大家覺(jué)得小P的答案能給多少分?

          f2da7e5fc52d16be7188bf8cc160dec8.webp

          黯然離場(chǎng)


          美女面試官沉吟半天,說(shuō)到:“雖然我們招聘的是初級(jí)Python開(kāi)發(fā),要求也不高,可你理解我說(shuō)的臨時(shí)文件嗎?你以為定義一個(gè)帶tmp的文件名就叫臨時(shí)文件?而且,如果你的上游還存在服務(wù)去多次調(diào)用你,你定義的這個(gè)變量支持高可用嗎?”

          f2da7e5fc52d16be7188bf8cc160dec8.webp

          更好的作答

          小P心一涼,這次面試只能以美女面試官的微微一笑而告終了...


          那么,如果是我們?cè)撊绾巫鞔鹉兀考热皇敲嬖嚦跫?jí)Python工程師,題目本身自然是不難的,只因?yàn)樾沒(méi)有關(guān)注Python的基本模塊:tempfile其實(shí)這道題,如果使用Python的tempfile模塊,很容易便實(shí)現(xiàn)了:

          import?tempfile

          def?make_temp_file():
          ????_tmp_file?=?tempfile.TemporaryFile()
          ????try:
          ????????print(_tmp_file.name)
          ????????_tmp_file.write(b"something")
          ????????_tmp_file.seek(0)
          ????????#?call?three_func
          ????????three_func(_tmp_file)
          ????finally:
          ????????_tmp_file.close()

          output:
          C:\Users\ADMINI~1\AppData\Local\Temp\tmprfz_ifs7
          read?file?info:something

          有時(shí)候知識(shí)面太窄,不僅容易重造輪子,還沒(méi)人家原生的好用。簡(jiǎn)單解釋下TemporaryFile。TemporaryFile會(huì)針對(duì)系統(tǒng)差別在臨時(shí)路徑下:

          windows:C:\Users\ADMINI~1\AppData\Local\Temp

          linux:/tmp/?

          創(chuàng)建一個(gè)tmp開(kāi)頭+8位隨機(jī)數(shù)的文件

          文件在調(diào)用close方法時(shí),釋放文件內(nèi)存并刪除該臨時(shí)文件。使用tempfile.TemporaryFile,每次生成隨機(jī)名稱文件,不僅達(dá)到了美女面試官對(duì)于高可用的要求,也縮減了代碼,完美!當(dāng)然我們也可以模擬該模塊自己實(shí)現(xiàn)一個(gè)臨時(shí)文件生成器,但前提是:

          1. 判斷操作系統(tǒng)
          2. 調(diào)用random隨機(jī)數(shù)
          3. 文件的自動(dòng)清理等... 喜歡的朋友可以嘗試自己來(lái)造一個(gè)輪子。

          好文章,我在看

          瀏覽 37
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美福利视频 | 免费a级黄片 | 亚洲视频欧美视频 | 日韩欧美在中文 | 99热欧美 |