CÁCH XỬ LÝ FILE trong Python
Đọc dữ liệu văn bản với Python
Câu lệnh đọc các file dữ liệu văn bản như txt và csv bằng Python. Dữ Liệu Thuần Văn Bản (Plain Text)
Thông thường để đọc file csv, bạn sẽ dùng gói thư viện pandas. Pandas là gói thư viện phân tích, chỉnh sửa dữ liệu dạng bảng được sử dụng rộng rãi trong cộng đồng khoa học dữ liệu thế giới. Pandas hỗ trợ tạo bảng dữ liệu (data frame) từ nhiều loại dữ liệu đầu vào khác nhau kể cả csv.
Bạn có thể tham khảo thêm các thông số khác tại đây: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
Cú pháp:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
filename: Đối số file_name là một giá trị chuỗi chứa tên của các file mà bạn muốn truy cập.
access_mode: Các access_mode xác định các chế độ của file được mở ra như read, write, append,... Đây là thông số tùy chọn và chế độ truy cập file mặc định là read (r).
buffering: Nếu buffer được thiết lập là 0, nghĩa là sẽ không có trình đệm nào diễn ra. Nếu xác định là 1, thì trình đệm dòng được thực hiện trong khi truy cập một File. Nếu là số nguyên lớn hơn 1, thì hoạt động đệm được thực hiện với kích cỡ bộ đệm đã cho. Nếu là số âm, thì kích cỡ bộ đệm sẽ là mặc định.
Thuộc tính của File:
file = open("plc.txt", "wb") print "Tên của file là: ", file.name print "File có đóng hoặc không? : ", file.closed print "Chế độ mở file : ", file.mode
Phương thức rename() trong os Module được sử dụng để thay tên file. Phương thức này nhận hai tham số là tên file cũ và tên file mới.
Cú pháp
1 | os.rename(ten_file_hien_tai, ten_file_moi) |
Ví dụ sau thay tên test1.txt thành test2.txt:
1 2 3 | import os # Thay ten tu test1.txt thanh test2.txt os.rename( "test1.txt" , "test2.txt" ) |
Bạn có thể sử dụng phương thức remove() của os Module để xóa các file với tham số là tên file bạn cần xóa.
Cú pháp
1 | os.remove(ten_file) |
Ví dụ sau sẽ xóa test2.txt:
1 2 3 | import os # Xoa test2.txt os.remove( "text2.txt" ) |
Bạn có thể sử dụng phương thức mkdir() của os Module để tạo các thư mục trong thư mục hiện tại. Bạn cần cung cấp một tham số là tên thư mục cho phương thức này.
Cú pháp
1 | os.mkdir( "thu_muc_moi" ) |
Ví dụ sau tạo một thư mục test trong thư mục hiện tại.
1 2 3 | import os # Tao mot thu muc la "test" os.mkdir( "test" ) |
Bạn có thể sử dụng phương thức chdir() để thay đổi thư mục hiện tại. Phương thức chdir() nhận một tham số là tên của thư mục bạn muốn tới từ thư mục hiện tại.
Cú pháp
1 | os.chdir( "thu_muc_moi" ) |
Ví dụ sau tới thư mục /home/newdir.
1 2 3 | import os # Thay doi mot thu muc toi "/home/newdir" os.chdir( "/home/newdir" ) |
Phương thức getcwd() hiển thị thư mục đang làm việc hiện tại.
Cú pháp
1 | os.getcwd() |
Ví dụ sau hiển thị thư mục đang làm việc hiện tại.
1 2 3 | import os # Lenh nay se cung cap vi tri thu muc hien tai os.getcwd() |
Phương thức rmdir() xóa thư mục mà có tên được truyền như là một tham cố cho phương thức này.
Trước khi xóa thư mục, tất cả nội dung trong nó nên được xóa.
Cú pháp
1 | os.rmdir( 'ten_thu_muc' ) |
Ví dụ sau sẽ xóa thư mục /tmp/test. Bạn phải cung cấp tên đầy đủ của thư mục, nếu không phương thức này sẽ không tìm thấy thư mục đó và sẽ không có hoạt động xóa diễn ra.
1 2 3 | import os # Xoa thu muc "/tmp/test" . os.rmdir( "/tmp/test" ) |
Đối tượng File và OS cung cấp rất nhiều phương thức tiện ích để xử lý và thao tác với File và thư mục trên hệ điều hành Windows và Unix. Bạn truy cập đường link sau để tìm hiểu các phương thức này.
Đối tượng File: cung cấp các phương thức để thao tác File.
os Module: cung cấp rất nhiều phương thức để thao tác File và thư mục.
Nếu các bạn muốn tìm hiểu rõ hơn về các parameter khác. Hãy dùng lệnh:
>>> help(open)
Công dụng: Nếu size bị bỏ trống hoặc là một số âm. Nó sẽ đọc hết nội dung của file đồng thời đưa con trỏ file tới cuối file. Nếu không nó sẽ đọc tới n kí tự (với n = size) hoặc cho tới khi nội dung của file đã đọc xong.
- Sau khi đọc được nội dung, nó sẽ trả về dưới một dạng chuỗi.
- Nếu không đọc được gì, phương thức sẽ trả về một chuỗi có độ dài bằng 0
Ví dụ:
>>> fobj = open('kteam.txt')
>>> data = fobj.read()
>>> data
"How Kteam\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
>>> print(data)
Đây là việc chúng ta nên làm sau khi thao tác xong với file. Đó là đóng file.
Phương thức readline
Cú pháp:
<File>.readline(size=-1)
Công dụng: Với parameter size thì hoàn toàn tương tự như phương thức read.
- Khác biệt ở chỗ, phương thức readline chỉ đọc một dòng có nghĩa là đọc tới khi nào gặp newline hoặc hết file thì ngừng.
- Con trỏ file cũng sẽ đi từ dòng này qua dòng khác.
- Kết quả đọc được trả về dưới dạng một chuỗi.
- Nếu không đọc được gì, phương thức sẽ trả về một chuỗi có độ dài bằng
Ví dụ:
Cú pháp:
<File>.close()
Phương thức readlines
Cú pháp:
<File>.readlines(hint=-1)
Ở mức độ cơ bản, ta không phải quan tâm đến parameter hint.
Công dụng: Phương thức này sẽ đọc toàn bộ file, sau đó cho chúng vào một list. Với các phần tử trong list là mỗi dòng của file.
- Con trỏ file sẽ được đưa tới cuối file. Khi đó, nếu bạn tiếp tục dùng readlines. Bạn sẽ nhận được một list rỗng.
Ví dụ:
>>> fobj = open('kteam.txt')
>>> list_content = fobj.readlines()
>>> list_content
Phương thức write
Cú pháp:
<File>.write(text)
Công dụng: Phương thức này sẽ trả về số kí tự mà chúng ta ghi vào.
Ví dụ:
>>> fobj = open('kteam_2.txt', 'w')
>>> fobj.write('The first line\n') # thêm \n để kết thúc 1 dòng
15
>>> fobj.write('And last line too')
17
>>> fobj.close()
1234567
Mỗi lần sử dụng write. Con trỏ file sẽ được đặt ngay sau kí tự cuối cùng được ghi. Hãy lưu ý điều này, nó rất quan trọng đấy. Đặc biệt là khi bạn sử dụng các mode vừa đọc vừa ghi.
Dưới đây là chương trình ví dụ để đọc và ghi dữ liệu từ một File trong Python:
1 2 3 4 5 6 7 8 9 10 11 | obj = open ( "abcd.txt" , "w" ) obj.write( "Python xin chao cac ban" ) obj.close() obj1 = open ( "abcd.txt" , "r" ) s = obj1.read() print s obj1.close() obj2 = open ( "abcd.txt" , "r" ) s1 = obj2.read( 20 ) print s1 obj2.close() |
Kết quả:
1 2 | Python xin chao cac ban Chao mung ban den voi the gioi Python |
Bạn có thể thấy, con trỏ file rất quan trọng, nó dẫn đường cho việc đọc file, viết file. Và bạn cũng cần phải kiểm soát được nó.
Việc đó, ta sẽ nhờ tới phương thức seek
Phương thức seek
Cú pháp:
<File>.seek(offset, whence=0)
Với Python 3.X. Một text file sẽ chỉ được sử dụng whence = 0. whence = 1 hoặc whence = 2 chỉ sử dụng với binary file.
Với Python 2.X thì bạn không phải quan tấm vấn đề này.
Do đó, ta cũng không cần quan tâm tới parameter whence.
Công dụng: Phương thức này giúp ta di chuyển con trỏ từ vị trí đầu file qua offset kí tự. Và parameter offset phải là một số tự nhiên.
- Nhờ phương thức này, ta có thể ghi nội dung từ bất cứ đâu trong file.
- Và từ đó ta có thể đọc lại file sau khi ta đưa con trỏ file xuống cuối file.
Ví dụ:
>>> fobj = open('kteam.txt')
>>> fobj.read()
"How Kteam\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
>>> fobj.read()
''
>>> fobj.seek(0)
Cấu trúc cơ bản của câu lệnh with là
with expression [as variable]:
with-block
123
Nhớ rằng with-block nằm thụt vào so với dòng with expression (theo chuẩn PEP8 là 4 space và là dùng space không dùng tab)
Câu lệnh này liên quan đến phương thức __enter__ và __exit__ của đối tượng. Do đó, ở đây Kteam sẽ nói cơ bản khi sử dụng file.
Đặc điểm của câu lệnh with khi sử dụng với file là. Khi kết thúc with-block. File sẽ được đóng.
>>> with open('kteam.txt') as fobj:
... data = fobj.read()
...
>>> data
"How Kteam\nFree Education\n\nShare to better\n\nprint('hello world!')\n"
>>> fobj.read() # không thể đọc file, vì file đã đóng
Nhận xét
Đăng nhận xét