Cách tốt nhất để mở một tệp như đọc/ghi nếu nó tồn tại, hoặc nếu nó không, sau đó tạo nó và mở nó dưới dạng đọc/viết? Từ những gì tôi đọc,
with open["file.dat","a+"] as f:
f.write[...]
...
6 nên làm điều này, phải không?Nó không hoạt động cho tôi [Python 2.6.2] và tôi tự hỏi liệu đó có phải là vấn đề phiên bản hay không nên làm việc như vậy hay không.
Điểm mấu chốt là, tôi chỉ cần một giải pháp cho vấn đề. Tôi tò mò về những thứ khác, nhưng tất cả những gì tôi cần là một cách tốt đẹp để thực hiện phần mở đầu.
Thư mục kèm theo có thể ghi được bởi người dùng và nhóm, không phải khác [tôi đang ở trên hệ thống Linux ... vì vậy quyền 775 nói cách khác] và lỗi chính xác là:
Ioerror: Không có tệp hoặc thư mục như vậy.
Tế bào thần kinh
4.7104 Huy hiệu vàng33 Huy hiệu bạc54 Huy hiệu Đồng4 gold badges33 silver badges54 bronze badges
Đã hỏi ngày 3 tháng 6 năm 2010 lúc 15:05Jun 3, 2010 at 15:05
4
Bạn nên sử dụng
with open["file.dat","a+"] as f:
f.write[...]
...
7 với chế độ with open["file.dat","a+"] as f:
f.write[...]
...
8:file = open['myfile.dat', 'w+']
Igor Chubin
59.1k10 Huy hiệu vàng117 Huy hiệu bạc139 Huy hiệu đồng10 gold badges117 silver badges139 bronze badges
Đã trả lời ngày 3 tháng 6 năm 2010 lúc 15:12Jun 3, 2010 at 15:12
muksiemksiemuksie
Huy hiệu vàng 12K11 gold badge18 silver badges14 bronze badges
10
Ưu điểm của cách tiếp cận sau là tệp được đóng đúng ở đầu của khối, ngay cả khi một ngoại lệ được nâng lên trên đường. Nó tương đương với
with open["file.dat","a+"] as f:
f.write[...]
...
9, nhưng ngắn hơn nhiều.properly closed at the block's end, even if an exception
is raised on the way. It's equivalent to with open["file.dat","a+"] as f:
f.write[...]
...
9, but much shorter.with open["file.dat","a+"] as f:
f.write[...]
...
A+ mở một tập tin cho cả nối tiếp và đọc. Con trỏ tệp ở cuối tệp nếu tệp tồn tại. Tệp mở trong chế độ phụ lục. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để đọc và ghi. Chế độ tệp -Python Opens a file for both appending and reading. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing. -Python file modes
Phương thức Seek [] đặt vị trí hiện tại của tệp.
f.seek[pos [, [0|1|2]]]
pos .. position of the r/w pointer
[] .. optionally
[] .. one of ->
0 .. absolute position
1 .. relative position to current
2 .. relative position from end
Chỉ được phép các ký tự "RWAB+"; Phải có chính xác một trong những "RWA" - xem Stack & nbsp; Overflow Câu hỏi chi tiết chế độ tệp Python.
Đã trả lời ngày 12 tháng 3 năm 2013 lúc 11:06Mar 12, 2013 at 11:06
QWERTYQWERTYQwerty
26.4K21 Huy hiệu vàng103 Huy hiệu bạc127 Huy hiệu đồng21 gold badges103 silver badges127 bronze badges
8
'''
w write mode
r read mode
a append mode
w+ create file if it doesn't exist and open it in write mode
r+ open for reading and writing. Does not create file.
a+ create file if it doesn't exist and open it in append mode
'''
example:
file_name = 'my_file.txt'
f = open[file_name, 'w+'] # open file in write mode
f.write['python rules']
f.close[]
[FYI đang sử dụng Python phiên bản 3.6.2]
bad_coder
9.84420 Huy hiệu vàng40 Huy hiệu bạc64 Huy hiệu đồng20 gold badges40 silver badges64 bronze badges
Đã trả lời ngày 30 tháng 12 năm 2017 lúc 16:26Dec 30, 2017 at 16:26
1
Thực hành tốt là sử dụng như sau:
import os
writepath = 'some/path/to/file.txt'
mode = 'a' if os.path.exists[writepath] else 'w'
with open[writepath, mode] as f:
f.write['Hello, world!\n']
Đã trả lời ngày 4 tháng 5 năm 2015 lúc 1:49May 4, 2015 at 1:49
LollerCoasterLollerCoasterlollercoaster
15.3k34 Huy hiệu vàng108 Huy hiệu bạc169 Huy hiệu đồng34 gold badges108 silver badges169 bronze badges
2
Thay đổi "RW" thành "W+"
Hoặc sử dụng 'A+' để nối thêm [không xóa nội dung hiện có]
Đã trả lời ngày 3 tháng 6 năm 2010 lúc 15:12Jun 3, 2010 at 15:12
muksiemksiebaloo
Huy hiệu vàng 12K14 gold badges25 silver badges35 bronze badges
0
Ưu điểm của cách tiếp cận sau là tệp được đóng đúng ở đầu của khối, ngay cả khi một ngoại lệ được nâng lên trên đường. Nó tương đương với
with open["file.dat","a+"] as f:
f.write[...]
...
9, nhưng ngắn hơn nhiều.It is a much more elegant solution than the proposed ones in this thread.A+ mở một tập tin cho cả nối tiếp và đọc. Con trỏ tệp ở cuối tệp nếu tệp tồn tại. Tệp mở trong chế độ phụ lục. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để đọc và ghi. Chế độ tệp -Python
Phương thức Seek [] đặt vị trí hiện tại của tệp.
filename.mkdir[parents=True, exist_ok=True]
Chỉ được phép các ký tự "RWAB+"; Phải có chính xác một trong những "RWA" - xem Stack & nbsp; Overflow Câu hỏi chi tiết chế độ tệp Python.Apr 23, 2018 at 6:29
Đã trả lời ngày 12 tháng 3 năm 2013 lúc 11:06Granitosaurus
QWERTYQWERTY4 gold badges53 silver badges77 bronze badges
6
>>> import os
>>> if os.path.exists["myfile.dat"]:
... f = file["myfile.dat", "r+"]
... else:
... f = file["myfile.dat", "w"]
26.4K21 Huy hiệu vàng103 Huy hiệu bạc127 Huy hiệu đồng
[FYI đang sử dụng Python phiên bản 3.6.2]Jun 3, 2010 at 15:18
9.84420 Huy hiệu vàng40 Huy hiệu bạc64 Huy hiệu đồngKhorkrak
Đã trả lời ngày 30 tháng 12 năm 2017 lúc 16:261 gold badge26 silver badges34 bronze badges
3
Thực hành tốt là sử dụng như sau:
file_path = 'myfile.dat'
try:
fp = open[file_path]
except IOError:
# If not exists, create the file
fp = open[file_path, 'w+']
Đã trả lời ngày 4 tháng 5 năm 2015 lúc 1:49May 27, 2014 at 6:20
LollerCoasterLollerCoasterChien-Wei Huang
15.3k34 Huy hiệu vàng108 Huy hiệu bạc169 Huy hiệu đồng1 gold badge17 silver badges27 bronze badges
Use:
with open["file.dat","a+"] as f:
f.write[...]
...
0Thay đổi "RW" thành "W+"
Hoặc sử dụng 'A+' để nối thêm [không xóa nội dung hiện có]Feb 2, 2015 at 19:36
Baloobaloo
7.5174 Huy hiệu vàng25 Huy hiệu bạc35 Huy hiệu ĐồngVì Python 3.4, bạn nên sử dụng
f.seek[pos [, [0|1|2]]]
pos .. position of the r/w pointer
[] .. optionally
[] .. one of ->
0 .. absolute position
1 .. relative position to current
2 .. relative position from end
0 để "chạm vào". Đó là một giải pháp thanh lịch hơn nhiều so với những giải pháp được đề xuất trong chủ đề này.
from pathlib import Path
filename = Path['myfile.txt']
filename.touch[exist_ok=True] # will create file, if it exists will do nothing
file = open[filename]
Jan 30, 2021 at 0:27
2
Điều tương tự với các thư mục:
Đã trả lời ngày 23 tháng 4 năm 2018 lúc 6:29
with open["file.dat","a+"] as f:
f.write[...]
...
2Granitosaurusgranitosaurus
Huy hiệu vàng 19.7K453 Huy hiệu bạc77 Huy hiệu đồngJun 3, 2010 at 15:11
R+ có nghĩa là đọc/viếtSilentGhost
Đã trả lời ngày 3 tháng 6 năm 2010 lúc 15:1865 gold badges302 silver badges291 bronze badges
Khorkrakkhorkrak
Tế bào thần kinh
4.7104 Huy hiệu vàng33 Huy hiệu bạc54 Huy hiệu Đồng4 gold badges33 silver badges54 bronze badges
Đã hỏi ngày 3 tháng 6 năm 2010 lúc 15:05Jun 22, 2013 at 12:16
Bạn nên sử dụng
with open["file.dat","a+"] as f:
f.write[...]
...
7 với chế độ with open["file.dat","a+"] as f:
f.write[...]
...
8:Igor Chubin
59.1k10 Huy hiệu vàng117 Huy hiệu bạc139 Huy hiệu đồng
Tế bào thần kinh
4.7104 Huy hiệu vàng33 Huy hiệu bạc54 Huy hiệu Đồng4 gold badges33 silver badges54 bronze badges
Đã trả lời ngày 3 tháng 6 năm 2010 lúc 15:12Jun 3, 2010 at 15:29
user49117user49117user49117
muksiemksie3 silver badges9 bronze badges
2
Huy hiệu vàng 12K1
Ưu điểm của cách tiếp cận sau là tệp được đóng đúng ở đầu của khối, ngay cả khi một ngoại lệ được nâng lên trên đường. Nó tương đương với
with open["file.dat","a+"] as f:
f.write[...]
...
9, nhưng ngắn hơn nhiều.Oct 11, 2015 at 20:10
Gustavo6046Gustavo6046Gustavo6046
A+ mở một tập tin cho cả nối tiếp và đọc. Con trỏ tệp ở cuối tệp nếu tệp tồn tại. Tệp mở trong chế độ phụ lục. Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để đọc và ghi. Chế độ tệp -Python8 silver badges17 bronze badges
Phương thức Seek [] đặt vị trí hiện tại của tệp.
with open["file.dat","a+"] as f:
f.write[...]
...
3Chỉ được phép các ký tự "RWAB+"; Phải có chính xác một trong những "RWA" - xem Stack & nbsp; Overflow Câu hỏi chi tiết chế độ tệp Python.Jan 12, 2018 at 13:26
Đã trả lời ngày 12 tháng 3 năm 2013 lúc 11:06
Vấn đề này dễ dàng được giải quyết bằng cách sử dụng chế độ X ít được biết đến để mở [] thay vì chế độ W thông thường. Ví dụ:
with open["file.dat","a+"] as f:
f.write[...]
...
4Nếu tệp là chế độ nhị phân, hãy sử dụng chế độ XB thay vì XT.
Đã trả lời ngày 14 tháng 12 năm 2017 lúc 13:58Dec 14, 2017 at 13:58
0
with open["file.dat","a+"] as f:
f.write[...]
...
5Đã trả lời ngày 8 tháng 8 năm 2018 lúc 5:45Aug 8, 2018 at 5:45