1. 程式人生 > >python基礎四-檔案讀取

python基礎四-檔案讀取

檔案讀取
open()接受一個引數:要開啟的檔名, 並返回一個表示檔案的物件, 儲存到後面的變數中
python會在當前執行檔案所在目錄查詢
可以使用絕對路徑, 在linux中使用'/', 在windows使用'\'
絕對路徑通常較長, 建議存到一個變數中!
關鍵字with在不再需要訪問檔案(合適的時候)後自動將檔案關閉

pi_digits.txt
3.1415926535
  8979323856
  2643383279
with open('pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents)
#這樣打印出來會多一個空行,原因在於read()在每一行末都會返回一個空字串,將這個空字串顯示出來就是一個空行,即read()在最後一行行末遇到一個空字串,最後多列印了一個空行
    print(contents.rstrip())
#逐行讀取
filename = 'pi_digits.txt'

with open(filename) as file_object:
    for i in file_object:
        print(i.rstrip())

建立一個包含檔案各行內容的列表
readlines()返回一個列表,包含所有行

filename = 'text_files\pi_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines()

print(type(lines))

print(lines)

for line in lines:
    print(line.rstrip())
    
# result:
# <class 'list'>
# ['3.1415926535\n', '  8979323856\n', '  2643383279\n', '  ']
# 3.1415926535
#   8979323856
#   2643383279

#為什麼列表最後有一個空格?因為readlines()讀到檔案末尾了

檔案寫入, python只能將str型別寫入文字檔案

filename = 'programming.txt'
with open(filename, 'w') as file_object:#如果沒有指定第二個引數,預設為只讀
    file_object.write("I love programming.")

write()不會在文字末尾新增換行
寫入多行要用'\n'


#異常處理
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")

while True:
    first_number = input("\nFirst number: ")
    if first_number == 'q':
        break
    second_number = input("\nSecond number: ")
    try:
       answer = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("You can't divide by 0!")
    else:
        print(answer)
#try-except-else程式碼塊原理: try-except程式碼塊後面還有其他程式碼, 程式將接著執行
#意思就是try嘗試執行, except負責處理出錯, 其餘情況由else負責

#儲存資料
#json.dump()儲存; json.load()讀取
import json
numbers = [2,3,5,7,11,13]
filename = 'number.json'
with open(filename, 'w') as f_obj:
    json.dump(numbers, f_obj)   #接受兩個引數, 要儲存的資料以及可用於儲存資料的檔案物件

#讀取
import json 
filename = 'number.json'
with open(filename) as f_obj:
    numbers = json.load(f_obj)
print(numbers)
print(type(numbers))