如何使用 pathlib 中的分隔符访问另一个 file/folder
How to use separators in pathlib to acces another file/folder
我有一个脚本可以根据一天中的当前时间(白天或晚上)更改 Windows 背景图像。我想让这个脚本可扩展,以便在不更改代码的情况下在另一台计算机上使用。
from datetime import datetime, time
import pandas
import ctypes
from pathlib import Path
file_path = "myfile.xlsx" #sunrise/sunset file path
print(file_path)
data = pandas.read_excel(file_path, header=0) #Header on line 0
#Today as day number in reference to 1st of Jan
day = datetime.now().timetuple().tm_yday
#Today's parameters
#sr and ss are column names in the Excel spreadsheet for sunrise and sunset respectively
#Minus 1 to account for 0 based indexing
sunrise = data["sr"][day - 1]
sunset = data["ss"][day - 1]
#Function to convert time objects into integers
def seconds_in_time(time_value: time):
return (time_value.hour * 60 + time_value.minute) * 60 + time_value.second
notification_minutes = 5
notification_seconds = notification_minutes * 60
#Variable for a moment in time 5 minutes before the sunset
sunset_minus_five = seconds_in_time(sunset) - notification_seconds
#Setting up the day_night variable depending on the now variable
#delta calculates the difference in seconds between now and sunset -during night- and sunrise -during day-
#A negative value for delta means that now variable is equal to any moment between midnight and the sunrise
if now > sunrise and now < sunset:
day_night = 'day'
delta = (seconds_in_time(now) - seconds_in_time(sunrise))
else:
day_night = 'night'
delta = (seconds_in_time(now) - seconds_in_time(sunset))
#delta_notification calculates the difference in seconds between now and sunset_minus_five
delta_notification = seconds_in_time(now) - sunset_minus_five
abs_path = Path().resolve()
print(abs_path)
sep = '\'
target_path = abs_path + sep + day_night + '.jpg'
print(target_path)
#Function to change the wallpaper
def changeBG(target_path):
ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 3) #SystemParametersInfoW for x64 architecture
#Wallpaper when code is ran user log on
#changeBG(target_path)
此代码returns我出现以下错误:
TypeError Traceback (most recent call last)
<ipython-input-11-ca377c654d5c> in <module>
42 print(abs_path)
43 sep = '\'
---> 44 target_path = abs_path + sep + day_night + '.jpg'
45 print(target_path)
46
TypeError: unsupported operand type(s) for +: 'WindowsPath' and 'str'
在采用这种 pathlib
方法之前,我尝试了一种 static 方法:
path = 'C:\Users\myuser\Desktop\Sunset\wallpapers_desktop_only\'+ day_night +'\'+ vmc_imc_day_night() +'.jpg'
#Function to change the wallpaper
def changeBG(path):
ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 3) #SystemParametersInfoW for x64 architecture
这没有任何问题,因为 ctypes
期望的分隔符是 \
,但是 pathlib
returns 我 \
不能使用作为字符串。
如何使用 pathlib
才能使用工作目录中的任何 files/directories?
错误告诉你不能连接 str 和 WindowsPath,
尝试使用:
target_path = abs_path / '{}.jpg'.format(day_night)
pathlib
与您使用的方式不同。
当使用 pathlib 时,您无需自己添加分隔符,您可以使用 /
运算符(在包中被覆盖)
来连接路径
你应该试试:
target_path = abs_path / f'{day_night}.jpg'
我有一个脚本可以根据一天中的当前时间(白天或晚上)更改 Windows 背景图像。我想让这个脚本可扩展,以便在不更改代码的情况下在另一台计算机上使用。
from datetime import datetime, time
import pandas
import ctypes
from pathlib import Path
file_path = "myfile.xlsx" #sunrise/sunset file path
print(file_path)
data = pandas.read_excel(file_path, header=0) #Header on line 0
#Today as day number in reference to 1st of Jan
day = datetime.now().timetuple().tm_yday
#Today's parameters
#sr and ss are column names in the Excel spreadsheet for sunrise and sunset respectively
#Minus 1 to account for 0 based indexing
sunrise = data["sr"][day - 1]
sunset = data["ss"][day - 1]
#Function to convert time objects into integers
def seconds_in_time(time_value: time):
return (time_value.hour * 60 + time_value.minute) * 60 + time_value.second
notification_minutes = 5
notification_seconds = notification_minutes * 60
#Variable for a moment in time 5 minutes before the sunset
sunset_minus_five = seconds_in_time(sunset) - notification_seconds
#Setting up the day_night variable depending on the now variable
#delta calculates the difference in seconds between now and sunset -during night- and sunrise -during day-
#A negative value for delta means that now variable is equal to any moment between midnight and the sunrise
if now > sunrise and now < sunset:
day_night = 'day'
delta = (seconds_in_time(now) - seconds_in_time(sunrise))
else:
day_night = 'night'
delta = (seconds_in_time(now) - seconds_in_time(sunset))
#delta_notification calculates the difference in seconds between now and sunset_minus_five
delta_notification = seconds_in_time(now) - sunset_minus_five
abs_path = Path().resolve()
print(abs_path)
sep = '\'
target_path = abs_path + sep + day_night + '.jpg'
print(target_path)
#Function to change the wallpaper
def changeBG(target_path):
ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 3) #SystemParametersInfoW for x64 architecture
#Wallpaper when code is ran user log on
#changeBG(target_path)
此代码returns我出现以下错误:
TypeError Traceback (most recent call last)
<ipython-input-11-ca377c654d5c> in <module>
42 print(abs_path)
43 sep = '\'
---> 44 target_path = abs_path + sep + day_night + '.jpg'
45 print(target_path)
46
TypeError: unsupported operand type(s) for +: 'WindowsPath' and 'str'
在采用这种 pathlib
方法之前,我尝试了一种 static 方法:
path = 'C:\Users\myuser\Desktop\Sunset\wallpapers_desktop_only\'+ day_night +'\'+ vmc_imc_day_night() +'.jpg'
#Function to change the wallpaper
def changeBG(path):
ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 3) #SystemParametersInfoW for x64 architecture
这没有任何问题,因为 ctypes
期望的分隔符是 \
,但是 pathlib
returns 我 \
不能使用作为字符串。
如何使用 pathlib
才能使用工作目录中的任何 files/directories?
错误告诉你不能连接 str 和 WindowsPath, 尝试使用:
target_path = abs_path / '{}.jpg'.format(day_night)
pathlib
与您使用的方式不同。
当使用 pathlib 时,您无需自己添加分隔符,您可以使用 /
运算符(在包中被覆盖)
你应该试试:
target_path = abs_path / f'{day_night}.jpg'