[英]How to use separators in pathlib to acces another file/folder
I have a script that changes the Windows background image considering the current time of the day (day or night).考虑到当前时间(白天或晚上),我有一个脚本可以更改 Windows 背景图像。 I wanted to make this script scalable in order to be used on another computer without any change in the code.我想让这个脚本可扩展,以便在不更改代码的情况下在另一台计算机上使用。
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)
This code returns me the following error:此代码向我返回以下错误:
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'
Before coming to this pathlib
approach I have tried a static approach with:在采用这种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
This has worked without any problems since the separator that ctypes
is expecting is \\
, but pathlib
returns me \
which cannot be used as a string.由于ctypes
期望的分隔符是\\
,因此这没有任何问题,但是pathlib
返回我\
不能用作字符串。
How can I use pathlib
in order to use any files/directories that are inside my working directory?如何使用pathlib
来使用工作目录中的任何文件/目录?
The error tells you cannot concatenate str and WindowsPath, try to use:该错误告诉您无法连接 str 和 WindowsPath,请尝试使用:
target_path = abs_path / '{}.jpg'.format(day_night)
pathlib
doesn't work the way you are using it. pathlib
无法按照您使用它的方式工作。
When using pathlib is saves you from adding the separators yourself, and you can concatenate paths by using the /
operator (which is overridden in the package)当使用 pathlib 时,您无需自己添加分隔符,您可以使用/
运算符(在包中被覆盖)连接路径
You should try:你应该试试:
target_path = abs_path / f'{day_night}.jpg'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.