简体   繁体   English

如何在 pathlib 中使用分隔符来访问另一个文件/文件夹

[英]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.

相关问题 如何使用 Pathlib 检查文件夹/文件权限 - How to check folder / file permissions with Pathlib 如何在 VS CODE 中使用“../”来访问当前文件夹之外的文件夹 - How to use "../" in VS CODE to acces a folder outside the current folder 使用pathlib遍历文件夹,我无法使用path + value + string打开文件 - Iterate through a folder with the use of pathlib, I can´t open file with the use of path + value + string 如何将 pathlib 与子进程一起使用 - How to use pathlib along with subprocess Python:如何将 go 一个文件夹返回到 pathlib - Python: How to go one folder back in pathlib 如何从 pathlib.path 获取给定文件所在的文件夹名称? - How to get folder name, in which given file resides, from pathlib.path? 如何使用 pathlib.Path().glob() 读入文件并将具有相同文件名的文件输出到另一个子文件夹中 - How to read in a file and output the file with the same file name into another subfolder using pathlib.Path().glob() 如何在 Django 中使用 pathlib.Path? - How to use pathlib.Path in Django? 如何使用pathlib处理以~开头的路径? - How to use pathlib to process paths that begin with ~? 如何在 python 的 memory 中映射/加载文件并从另一个进程访问它? - How to mmap/load a file in memory in python and acces to it from another process?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM