Functions and Files in python
mình đang học cuốn “Learn Python The Hard Ways” cho mình hỏi: " đoạn code này làm gì dậy?":
from sys import argv
1.script, input_file = argv
2.
3.def print_all(f):
4. print f.read()
5.
6.def rewind(f):
7. f.seek(0)
8.
9.def print_a_line(line_count, f):
10. print line_count, f.readline()
11.
12.current_file = open(input_file)
13.
14.print “First let’s print the whole file:
”
15.
16.print_all(current_file)
17.
18.print “Now let’s rewind, kind of like a tape.”
19.
20.rewind(current_file)
21.
22.print “Let’s print three lines:”
23.
24.current_line = 1
25.print_a_line(current_line, current_file)
26.
27.current_line = current_line + 1
28.print_a_line(current_line, current_file)
29.
30.current_line = current_line + 1
31.print_a_line(current_line, current_file)
giai thich tung dong cho minh voi? Cam on
1
Như mình đã từng giải thích.
script
sẽ nhận giá trị là tên củafile
mà bạn sử dụng vàinput_file
sẽ là mộtargument
nữa khi bạn chạy chương trình.Ví dụ file của bạn là
file.py
và bạn chạy chương trình với commandThì
script = 'file.py', input_file = 'text.txt'
2
Ở hàm này,
parameter f
sẽ nhận giá trị biến lưu giá trị liên quan đến file. Ví dụTất cả nội dung trong file
text.txt
sẽ được in ra màn hìnhconsole
(powershell
)3
về
parameter f
thì là nhưfunction print_all()
. Còn seek(offset) là một method giúp cho chúng ta đưa vị trí vềoffset
. Giống như việc bạn đang viết bài, thế là bạn nhảy lại dòng đầu để ghi tựa bài thì đó có nghĩa làseek(0)
. Dòng đầu coi là 0. Do đó ở đâyfunction rewind()
dịch tiếng Việt là tua lại. Nó sẽ bảo Python đưa mắt trở về dòng đầu tiên của file.4
Thật ra ở đây nếu nói rõ ràng vấn đề thì rất khó hiểu. Đây chỉ là một dạng sắp đặt sẵn thôi.
Khi bạn mở một file và sử dụng
readline()
thì nó sẽ lấy từng dòng ra. Ví dụCòn cái
line_count
mình sẽ nó sau.5
mở file
text.txt
và gán giá trị file đó vào cho biếncurrent_file
Một thông báo từ tác giả nói sẽ in toàn bộ nội dung file (text.txt) ra
Truyền
argument current_file
choparameter f
nhận. Và trongfunction print_all()
làprint(f.read())
tương tự như việcprint(current_file.read())
Sau khi sử dụng
read()
Python đã lướt hết mọi dòng củafile text.txt
do đó mắt nó đang nhìn dưới dòng cuối cùng. Nên giờ nếucurrent_file.read()
sẽ không ra nội dung gì. Do đó tác giả muốn tua lạiSử dụng
function rewind(current_file)
. Nó cũng tương đương nhưcurrent_file.seek(0)
. Nói với Python là đưa mắt lên dòng đầu tiên.Thông báo in 3 dòng. Nên nhớ là giờ Python đang nhìn ở dòng đầu tiên rồi
ở đây khi dùng
call function print_a_line()
thì cácparameters
làline_count=1, f=current_file
Nên trong
function
sẽ hoạt động như sauChú ý là bây giờ Python đang nhìn ở dòng đầu tiên. Method readline sẽ đọc dòng mà nó đang nhìn. Do đó kết quả sẽ được là
1 Dòng đầu tiên trong file text.txt
Sau khi đọc xong dòng đầu thì mắt Python nhìn xuống dòng 2
Kết quả
2 Dòng thứ hai trong file text.txt
Và cứ thế tới lần 3. và được kết quả
3 Dòng thứ ba trong file text.txt
Nếu như lần 4 bạn
call function
theo cách sau đâyprint_a_line(5, current_file)
thì kết quả là5 Dòng thứ tư trong file text.txt
Vì sao lại thế. Đó là vì mắt Python chỉ mới nằm ở dòng 4 nên nó chỉ đọc duy nhất dòng 4 chưa nhảy qua dòng 5 được.