python:检查文件是否存在,如果不存在,则创建它

本问题已经有最佳答案,请猛点这里访问。

我试了一试:接住,但不管用。我想我可以把它改成if语句,但是不明白为什么这个不行。这是我第一个"真正"的项目。我正在构建一个灌溉控制器,并创建一个灌溉时间表字典。第一个代码是我目前拥有的代码,第二个代码是我正在尝试的"测试"本身。每当我运行代码时,它都会重写现有文件,而我想让它打开文件(如果文件已经存在),然后不再重写它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# timer will first look for a saved file(dictionary) of already recorded
# irrigation times.  If no file exists it will create one.  

# irrigation timer which does scheduled irrigation as well as cyclic   irrigation for propagating plants.
# uses a lcd 1602 display
# will use up to 10 different valves

import time
import datetime
import threading
import RPi.GPIO as GPIO
from RPLCD import CharLCD # http://www.circuitbasics.com/raspberry-pi-lcd-set-up-and-programming-in-python/

GPIO.setmode(GPIO.BOARD)

# pinouts for lcd pins
lcd = CharLCD (cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])

# valve pins
valve_1 = 8
valve_2 = 10
valve_3 = 12
valve_4 = 16
valve_5 = 18
valve_6 = 22
valve_7 = 24
valve_8 = 26
valve_9 = 32
valve_10 = 36

# setup valve pins as outputs
GPIO.setup(valve_pin1, GPIO.OUT)
GPIO.setup(valve_pin2, GPIO.OUT)
GPIO.setup(valve_pin3, GPIO.OUT)
GPIO.setup(valve_pin4, GPIO.OUT)
GPIO.setup(valve_pin5, GPIO.OUT)
GPIO.setup(valve_pin6, GPIO.OUT)
GPIO.setup(valve_pin7, GPIO.OUT)
GPIO.setup(valve_pin8, GPIO.OUT)
GPIO.setup(valve_pin9, GPIO.OUT)
GPIO.setup(valve_pin10, GPIO.OUT)

#set all valve pins to off
GPIO.output(valve_pin1, False)
GPIO.output(valve_pin2, False)
GPIO.output(valve_pin3, False)
GPIO.output(valve_pin4, False)
GPIO.output(valve_pin5, False)
GPIO.output(valve_pin6, False)
GPIO.output(valve_pin7, False)
GPIO.output(valve_pin8, False)
GPIO.output(valve_pin9, False)
GPIO.output(valve_pin10, False)

# check to see if a schedule has been saved
def sched_check()
    try:
        file = open("schedule.dat","r")
        schedule = schedule.read()
        file.close()
    # create a list of schedule dictionaries
    except:
        schedule_list = []
        for schedule_number in range(10):
            schedule = {
                                       "timed" : {
                                                 "watering_days" : [],
                                                 "watering_times" : [],
                                                 "duration" :"timed_duration",
                                                  },
                                       "cyclic" : {
                                                 "time_on" :"seconds_on",
                                                 "time_off" :"seconds_off",
                                                 "blackout_window_start" :"blkout_time_start",
                                                 "blackout_window_stop" :"blkout_time_stop",
                                                   },
                                        }
            schedule_list.append(schedule)
        file = open("schedule.dat","w")
        file.write(str(schedule_list))
        file.close()

这就是问题所在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def sched_check():
    try:
        file = open("schedule.dat","r")
        schedule = schedule.read()
        file.close()
        print("file already exists")
    # create a list of schedule dictionaries
    except:
        schedule_list = []
        for schedule_number in range(10):
            schedule = {
                                       "timed" : {
                                                 "watering_days" : [],
                                                 "watering_times" : [],
                                                 "duration" :"timed_duration",
                                                  },
                                       "cyclic" : {
                                                 "time_on" :"seconds_on",
                                                 "time_off" :"seconds_off",
                                                 "blackout_window_start" :"blkout_time_start",
                                                 "blackout_window_stop" :"blkout_time_stop",
                                                   },
                                        }
            schedule_list.append(schedule)
        file = open("schedule.dat","w")
        file.write(str(schedule_list))
        file.close()
        print("new file created")

sched_check()


您可以使用os.path.exists("schedule.dat")。它返回一个布尔结果。

使用os.stat的另一种解决方案包括:

1
2
3
4
5
6
7
import os
try:
    os.stat("schedule.dat")
    ... # file exists
except:
    file = open("schedule.dat","w")
    ...

一个异常是您尝试stat一个不存在的文件。