2016-03-04 18 views
19

Tôi cần trợ giúp với Python. Tôi đang cố gắng để mở một tập tin, và nếu tập tin không tồn tại, tôi cần phải tạo nó và mở nó để viết. Tôi có điều này cho đến thời điểm này:Tạo một tệp nếu nó không tồn tại

#open file for reading 
fn = input("Enter file to open: ") 
fh = open(fn,'r') 
# if file does not exist, create it 
if (!fh) 
fh = open (fh, "w") 

Thông báo lỗi cho biết có sự cố trên dòng if(!fh). Tôi có thể sử dụng exist như trong Perl không?

+0

Bản sao có thể có của [Mở bằng Python không tạo tệp nếu nó không tồn tại] (http://stackoverflow.com/questions/2967194/open-in-python -does-not-create-a-file-nếu-it-doesnt-exist) –

Trả lời

4

Tôi nghĩ rằng điều này sẽ làm việc:

#open file for reading 
fn = input("Enter file to open: ") 
try: 
    fh = open(fn,'r') 
except: 
# if file does not exist, create it 
    fh = open(fn,'w') 

Ngoài ra, bạn không đúng cách đã viết fh = open (fh, "w") khi tập tin bạn muốn mở là fn

+4

Bạn giả định rằng tệp không thể mở được vì nó không tồn tại. Có thể bạn không có quyền đọc hoặc tên tệp không hợp lệ theo một cách nào đó. Bare 'except' không phải là một ý kiến ​​hay. – cdarke

+0

Tôi hiểu rằng, (bây giờ) nhưng điều này sẽ có hiệu quả đủ cho cấp độ lập trình của anh ấy, không giống như chúng tôi đang dạy anh ấy nghi thức lập trình hoặc bắt anh ta cho 'lớp' mặc dù. –

+4

OK, anh chàng tội nghiệp đến từ Perl nên anh ta cần tất cả sự giúp đỡ mà anh ta có thể nhận được. – cdarke

15

Vâng, trước hết, bằng Python không có hành !, mà 'd là not. Nhưng open cũng sẽ không thất bại âm thầm - nó sẽ ném một ngoại lệ. Và các khối cần phải được thụt lề đúng cách - Python sử dụng khoảng trống để chỉ khối ngăn chặn.

Vì vậy chúng tôi nhận được:

fn = input('Enter file name: ') 
try: 
    file = open(fn, 'r') 
except IOError: 
    file = open(fn, 'w') 
8

Sử dụng input() ngụ ý Python 3, Python gần đây 3 phiên bản đã thực hiện các IOError ngoại lệ bị phản đối (nó được bây giờ là một bí danh cho OSError). Vì vậy, giả sử bạn đang sử dụng Python 3.3 hoặc mới hơn:

fn = input('Enter file name: ') 
try: 
    file = open(fn, 'r') 
except FileNotFoundError: 
    file = open(fn, 'w') 
0

Trước tiên cho tôi đề cập rằng bạn có lẽ không muốn tạo ra một đối tượng tập tin mà cuối cùng có thể được mở cho việc đọc hoặc viết, tùy thuộc vào một điều kiện không thể sanh sản . Bạn cần phải biết phương pháp nào có thể được sử dụng, đọc hoặc viết, mà phụ thuộc vào những gì bạn muốn làm với fileobject.

Điều đó nói rằng, bạn có thể làm điều đó như là một trong những Random Scrub đề xuất, sử dụng try: ... ngoại trừ :. Trên thực tế đó là cách đề xuất, theo phương châm python "Nó dễ dàng hơn để yêu cầu sự tha thứ hơn sự cho phép".

Nhưng bạn cũng có thể dễ dàng kiểm tra cho sự tồn tại:

import os 
# open file for reading 
fn = raw_input("Enter file to open: ") 
if os.path.exists(fn): 
    fh = open(fn, "r") 
else: 
    fh = open(fn, "w") 

Lưu ý: sử dụng raw_input() thay vì đầu vào(), vì đầu vào() sẽ cố gắng thực hiện các văn bản nhập vào. Nếu bạn vô tình muốn thử nghiệm cho tệp "import", bạn sẽ nhận được một SyntaxError.

+0

Các chú thích liên quan đến 'input()' và 'raw_input()' chỉ áp dụng cho Python 2. Python 3 đã thay thế 'raw_input()' bằng 'input()' và sử dụng 'input()' cũ . – cdarke

+0

Điều đó có thể và sẽ là/là một cải tiến tốt để làm cho nó trực quan hơn. –

10

Nếu bạn không cần số nguyên tử bạn có thể sử dụng mô-đun os:

import os 

if not os.path.exists('/tmp/test'): 
    os.mknod('/tmp/test') 

CẬP NHẬT:

Như Cory Klein đề cập, trên Mac OS cho việc sử dụng os.mknod() bạn cần một quyền root, vì vậy nếu bạn là người dùng Mac OS, bạn có thể sử dụng open() thay vì os.mknod()

import os 

if not os.path.exists('/tmp/test'): 
    with open('/tmp/test', 'w'): pass 
+0

macOS [yêu cầu đặc quyền sudo để chạy mknod] (https://stackoverflow.com/a/32115794/446554) vì vậy điều này có thể không được di chuyển sang Mac trừ khi bạn đang chạy tập lệnh python của bạn với 'sudo'. –

2
''' 
w write mode 
r read mode 
a append mode 

w+ create file if it doesn't exist and open it in write mode 
r+ create file if it doesn't exist and open it in read mode 
a+ create file if it doesn't exist and open it in append mode 
''' 

dụ:

file_name = 'my_file.txt' 
f = open(file_name, 'a+') # open file in append mode 
f.write('python rules') 
f.close() 

Tôi hy vọng điều này sẽ giúp. [FYI đang sử dụng phiên bản python 3.6.2]

Các vấn đề liên quan