01/10/2018, 09:48
Exit (ctrl+D) trước khi xóa nhưng vẫn bị delete?
Mình có đoạn code như sau:
> # -*- coding: utf-8 -*-
> from sys import argv
> script, filename = argv
> print "Bạn có muốn mở file này?: %s" % filename
> print "Nếu có vui lòng nhấn enter"
> print "Nếu không vui lòng nhấn 'ctrl+c'"
> raw_input("...")
> open_file = open(filename)
> print open_file.read()
> print "Ok bây giờ tôi sẽ xóa nó"
> delete_file = open(filename, 'w')
> print "Đang trong quá trình xóa..."
> raw_input() # Tạm dừng trước khi thực hiện lệnh xóa
> delete_file.truncate()
> print "File đã bị xóa"
Nhưng không hiểu sao mình đã add code raw_input()
trước line delete_file.truncate()
Theo mình nghĩ khi tới line raw_input nếu mình enter nó sẽ xóa nhưng không hiểu sao mình bấm ctrl+D thì nội dung trong file vẫn bị xóa?
Mọi người giaỉ thích giúp mình với
Bài liên quan
Mình thì nghĩ khi bạn bấm ctrl+D thì nó sẽ đọc vào ký tự này ‘\x04’ rồi nhảy xuống lệnh delete chứ không tạm dừng đâu =))).
open là function trả về stream object, function clone của io.open, bạn nên xem thêm về module io trong python nhé.
Trở lại câu hỏi của bạn, khi bạn gọi open, sẽ có stream position trỏ vào vị trí chỉ định trong nội dung của bạn.
Khi bạn gọi mode ‘W’, trong io.open, w có nghĩa là ghi đè, do đó, con trỏ(không phải pointer đâu nhé) sẽ ở vào vị trí 0. nên file của bạn sẽ không có nội dung.
Đoạn code của bạn chỗ
delete_file = open(filename, 'w')
đã vô tình xóa nội dung file của bạn rồi.để hiểu rõ hơn, mình viết cho bạn 1 đoạn code thí nghiệm nhỏ nhé:
Mode write và add cũng tương tụ như vậy, bạn có thể suy ra
Mình cũng chả biết nữa, nhưng mà như comment của @nahi08 ahi nữa thì mình xóa mode ‘w’ thì khi ctrl+d nó sẽ out ra và không xóa file nữa
Em mới học python theo anh ltd (learnpythonthehardway) tới lv 16 thui à
Nên câu trả lời của anh em không hiểu mấy
Nhưng mà em cũng thử xóa mode ‘w’ thì line dưới nó báo lỗi anh ơi
delete_file.truncate() file not open for writing
Kiểu này chắc em phải học tiếp thôi, chứ hỏi như này toàn những kiến thức chưa học dễ bị sợ qúa
Nghĩa là trước dòng
print "Đang trong quá trình xóa..."
thì file đó đã bị xóa rồi, do'w'
là mở file sau đó xóa nội dung file luôn, vậy cách sửa là chuyển dòngdelete_file = open(filename, 'w')
xuống dướiraw_input()
Haha, đơn giản vậy mà mình không nghĩ ra.
Do mình dốt nên mình rất thích những câu tl ngắn gọn như này
Đó là cách đối phó trị ngọn không trị gốc, sở dĩ mình giải thích các thứ như stream position là để bạn tự tìm ra cách.
Chính xác là đổi ‘w’ thành ‘a’ chứ không phải là xóa ‘w’.
Cái nữa là bạn hỏi giải thích cho bạn tại sao nên mình mới nói về vấn đề này. Chứ chỉ bạn sửa code để chạy được thì dễ lắm.
Hiểu được những gì mình nói bạn mới đi sâu vào sử dụng hiệu quả stream object, mình ví dụ
Áp dụng vào bài trên của bạn, mình có thể dùng cách này viết nâng cao function xóa từng chữ cái từ từ theo từng giây, cho tới khi bạn ctr+D hoặc file xóa hết.
Dạ vâng cảm ơn anh đã nhiệt tình chỉ dạy, em sẽ từ từ nghiên cứu câu tl của anh.
Có lẽ em cũng hiểu được phần nào rồi.
Mà anh dùng python 3 phải không? Em nhìn code hơi lạ, chứ nếu là python 2.7 thì có lẽ em cũng không bị rối í.
2 hay 3 mặc dù nói khác nhau nhưng thực ra không khác là mấy, chỉ có vài cái syntaxe nhỏ nhỏ thôi, chắc bạn thấy cấu trúc with … as, cái đấy là đặc sản của python, rất hữu ích. 2 hay 3 đều có.
Hiện tại python 3 đã rất ổn định rồi, khuyên bạn học thì học luôn 3 đi. Tất cả những gì của python2, python3 đều có, nhưng python3 có thì chưa chắc python2 đã làm được.
Mình thì học theo cuốn learnpythonthehardway í (anh ltd dạy lại), Thầy bảo không dùng python 3 nên mình cũng không học mắc công rối.
4 Ngày qua mình lười, bỏ học nên nay ôn tập lại những gì đã học được nhưng không hiểu sao bị báo lỗi này rất khó hiểu.
SyntaxError: EOF while scanning triple-quoted string literal
Đây là code của mình.
Do lỗi quá nên mình bọc comment lại rồi mà nó vẫn báo lỗi tít ở dưới line 43 mặc dù toàn bộ file của mình chỉ max có 41 line
Và line ở dưới này nó cũng báo lỗi, và trong vim thì mình thấy nó highlight số 1 và chữ file
thật sự khó hiểu. Theo qua trình mình học thì tất cả những kí tự trong “”" sẽ không có highlight trừ những kí tự đặc biệt :
%
\
Bạn in object làm gì nhỉ ?
Lỗi là bạn có 3 lần “”"
bỏ chỗ này đi
bạn coi lại sự khác nhau giữa w, a, r, wb, ab, rb, r+, w+ nhé
Ủa. Mình nhớ không lầm thì read là đọc
Thay vì mình print open_file thì mình thêm thuộc tính read trong open luôn không được hả ta?
Còn chỗ “”"
Mình không nhớ học ở bài mấy nhưng nó giúp mình viết multi line mà không cần phải print nhiều lần mà?
À là do code mình ở trên thì 3" nhưng ở dưới chỉ có 1" đóng này nên nó báo lỗi, nay qua sublime mới nhìn rõ chữ ở vim code nó đỏ đỏ tối thui ~_~