Giáo trình Python - Bài 8: Làm việc với file trong Python
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Python - Bài 8: Làm việc với file trong Python", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
giao_trinh_python_bai_8_lam_viec_voi_file_trong_python.pdf
Nội dung text: Giáo trình Python - Bài 8: Làm việc với file trong Python
- BÀI 8: LÀM VIỆC VỚI FILE TRONG PYTHON
- NỘI DUNG CHÍNH § File là gì? Vì sao cần sử dụng file? § Cách khai báo và mở file § Cách đọc/ghi dữ liệu vào file
- FILE LÀ GÌ? § File: là một tập hợp dữ liệu liên quan được máy tính ghi lên bộ nhớ ngoài (HDD, SSD, ) § Khi máy tính đọc file: copy dữ liệu từ bộ nhớ ngoài vào bộ nhớ trong của máy. § Khi máy tính ghi file: copy dữ liệu từ bộ nhớ trong ra bộ nhớ ngoài § File được dùng để lưu trữ dữ liệu § BufferS: là các vùng đặc biệt làm trung gian để đọc/ghi dữ liệu giữa máy tính và bộ nhớ ngoài (chẳng hạn: khi ghi dữ liệu, chương trình sẽ ghi vào bufferS trước, rồi sau đó mới ghi vào HDD)
- VÌ SAO CẦN SỬ DỤNG FILE § File chứa thông tin dữ liệu lâu dài trên các thiết bị lưu trữ, dễ dàng sử dụng nhiều lần § Thuận tiện để lưu trữ và xử lý dữ liệu lớn § Tránh nhập dữ liệu vào chương trình nhiều lần § Dễ dàng chia sẻ dữ liệu với các chương trình khác => Cần thiết phải sử dụng file để nhập/xuất dữ liệu trong khi viết các chương trình máy tính.
- FILE DỮ LIỆU File văn bản File nhị phân § Lưu trữ thông tin bằng các kí § Mã nhị phân dưới dạng byte tự văn bản (chữ cái, số, kí hiệu ) theo bảng mã ASCII § Không đọc được § Có thể đọc được § Có phần mở rộng .exe, § Có phần mở rộng .txt .mp3, § Không bảo mật § Độ bảo mật cao hơn § Ký tự có mã ASCII 26 đánh § Không có kí hiệu kết thúc dấu kết thúc file file
- QUY TRÌNH LÀM VIỆC VỚI FILE § Mở file để đọc hoặc ghi ( tùy chế độ và định dạng của file) § Xử lý file: Ghi/Đọc theo chế độ mở file § Đóng file khi hoàn tất xử lý From [email protected] Sat Jan 5 09:14:16 2008 Return-Path: Date: Sat, 5 Jan 2008 09:12:18 -0500 To: [email protected] From: [email protected] Subject: [sakai] svn commit: r39772 - content/branches/ Details:
- MỞ FILE § Trước khi làm việc với file, ta phải mở file bằng hàm open() § Hàm open() trả về một biến file được dùng để thực hiện các thao tác trên file = open( ,[ ]) • ten_bien: tên biến dùng để truy xuất đến file file = open(‘inbox.txt', 'r’) • ten_file: tên file hoặc đường dẫn file = open(’C:/example/inbox.txt’) đến file with open(”inbox.txt",'w’) as f: • Tên file: file cần mở ở cùng thư mục với file mã nguồn • Đường dẫn tuyệt đối nếu file không ở cùng thư mục với file mã nguồn • che_do: chế độ mở file để ghi, đọc, thêm (tùy chọn)
- MỞ FILE § Khi không tìm thấy file, chương trình báo lỗi § Sử dụng try except để bắt lỗi >>> fhand = open('stuff.txt') Traceback (most recent call last): File " ", line 1, in FileNotFoundError: [Errno 2] No such file or directory: 'stuff.txt'
- MỞ FILE § File chứa dấu tiếng Việt -> thêm mã hóa utf-8 khi mở file >>> fhand = open('stuff.txt’, endcoding = ‘utf-8’)
- CÁC CHẾ ĐỘ LÀM VIỆC VỚI FILE Chế độ Mô tả r Chế độ chỉ được phép đọc r+ Chế độ cho phép đọc và ghi w Mở file để ghi. Nếu file chưa tồn tại thì tạo mới file và ghi nội dung. Ngược lại, ghi đè lên nội dung cũ w+ Mở file để đọc và ghi. Nếu file chưa tồn tại thì tạo mới file và ghi nội dung. Ngược lại, ghi đè lên nội dung cũ a Mở file chế độ ghi tiếp. Nếu file đã tồn tại rồi thì ghi tiếp nội dung vào cuối file. Nếu file chưa tồn tại thì tạo một file mới và ghi nội dung. a+ Mở file chế độ đọc và ghi tiếp. Nếu file đã tồn tại rồi thì ghi tiếp nội dung vào cuối file. Nếu file chưa tồn tại thì tạo một file mới và ghi nội dung. x Mở file chế độ ghi. Tạo file độc quyền mới (exclusive creation) và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi
- ĐÓNG FILE § Hàm close(): Đóng file try: f = open(”inbox.txt",encoding = 'utf-8') # thực hiện các thao tác với tệp except: print(“Khong mo duoc file”) finally: f.close()
- XỬ LÝ FILE From [email protected] Sat Jan 5 09:14:16 2008\n Return-Path: \n Date: Sat, 5 Jan 2008 09:12:18 -0500\n To: [email protected]\n From: [email protected]\n Subject: [sakai] svn commit: r39772 - content/branches/\n \n Details: § File văn bản chứa ký tự xuống dòng ở cuối mỗi dòng, kí hiệu là ‘\n’ § ‘\n’ được coi là một ký tự.
- ĐỌC FILE § Hàm read([n]): đọc n ký tự từ file. Mặc định, đọc toàn bộ nội dung file thành 1 xâu ký tự § Hàm readline(): đọc lần lượt từng dòng ký tự trong file § Hàm readlines(): trả về danh sách các dòng ký tự trong file
- ĐỌC FILE >>> fhand = open(‘inbox.txt') >>> inp = fhand.read() >>> print(len(inp)) Đọc toàn bộ file thành một xâu 94626 ký tự (bao gồm tất cả các ký tự >>> print(inp[:20]) trong file, kể cả dấu xuống From stephen.marquar dòng)
- ĐỌC FILE § Biến file được coi như một chuỗi các xâu ký tự. Mỗi dòng trong file tương ứng với 1 xâu ký tự trong chuỗi này. § Có thể dùng lệnh lặp for để duyệt qua xfile = open('mbox.txt') toàn bộ chuỗi for line in xfile: § Lưu ý: Chuỗi là một tập hợp có thứ tự print(line)
- ĐỌC FILE Đếm số dòng: § Mở file để đọc fhand = open('mbox.txt') § Dùng lệnh for để đọc từng dòng count = 0 § Đếm và in ra số dòng for line in fhand: count = count + 1 print('Line Count:', count)
- VÍ DỤ 9-1 fname = input('Enter the file name: ') fhand = open(fname) count = 0 for line in fhand: if line.startswith('Subject:') : count = count + 1 print('There were', count, 'subject lines in', fname) Enter the file name: mbox.txt There were 1797 subject lines in mbox.txt Enter the file name: mbox-short.txt There were 27 subject lines in mbox-short.txt
- VÍ DỤ 9-1 fname = input('Enter the file name: ') try: fhand = open(fname) except: print('File cannot be opened:', fname) quit() count = 0 for line in fhand: if line.startswith('Subject:') : count = count + 1 print('There were', count, 'subject lines in', fname) Enter the file name: mbox.txt There were 1797 subject lines in mbox.txt Enter the file name: na na boo boo File cannot be opened: na na boo boo
- TÌM KIẾM TRONG FILE Có thể sử dụng câu lệnh if trong vòng lặp for để tìm kiếm và in ra những dòng thỏa mãi điều kiện fhand = open(‘inbox.txt') nào đó. for line in fhand: if line.startswith('From:') : print(line)
- TÌM KIẾM TRONG FILE fhand = open(‘inbox.txt') Sử dụng câu lệnh in để tìm for line in fhand: line = line.rstrip() kiếm trong file if not '@uct.ac.za' in line : continue print(line) From [email protected] Sat Jan 5 09:14:16 2008 X-Authentication-Warning: set sender to [email protected] using –f From: [email protected] Author: [email protected] From [email protected] Fri Jan 4 07:02:32 2008 X-Authentication-Warning: set sender to [email protected] using -f...



