使用 Python 自动将昨天的日期附加到文件名的末尾?
Automate appending yesterday's date to end of file names using Python?
我正在努力解决工作中的问题,我不是开发人员,但从事一般 IT 运营工作,我想在这里和那里学习一些东西,所以我现在可能离我的目标还很远我想在这里做。我刚刚一直在利用在线资源,这里还有一点来自《用 Python 自动化无聊的东西》一书。这是我的 objective:
我有两个文件使用 post 处理器每天早上同时自动放在我电脑上的一个文件夹中,我需要在我之前将昨天的日期添加到文件名的末尾将它们上传到 FTP 服务器,我每天早上大约在同一时间这样做。我正在尝试编写一个 Python 脚本,我可以在文件放入文件夹后立即以某种方式安排到 运行,这将以 MMDDYYYY 格式附加昨天的日期。例如,如果文件夹中的文件名为“holdings.CSV”和“transactions.CSV”,我需要将它们重命名为“holdings01112022.CSV”和“[=21=” ]”。我只想重命名文件夹中的新文件,前几天已经附加日期的文件将保留在文件夹中。再一次,我是一个完全的初学者,所以我的代码可能没有意义并且可能有多余或多余的行,我很乐意更正......我在这里走的路是正确的,我完全离开了吗?有什么建议吗?
import os, re
from datetime import date
from datetime import timedelta
directory = 'C:\Users\me\main folder\subfolder'
filePattern = re.compile('%s.CSV', re.VERBOSE)
for originalName in os.listdir('.'):
mo = filePattern.search(originalName)
if mo == None:
continue
today = date.today()
yesterday = today - timedelta(days = 1), '%M%D%Y'
for originalName in directory:
newName = originalName + yesterday
os.rename(os.path.join(directory, originalName), os.path.join(directory, newName))
感谢任何帮助。谢谢
你运行有什么问题吗?如果您只想获取 csv 文件,则可以使用一个 if 语句而不是使用正则表达式来简化代码。在将日期添加到文件名之前,您还需要将日期转换为字符串。 (即:newName = originalName[:-3] +str(yesterday))。
如果此代码没有解决您的问题,请提及您收到的错误,以便其他人更容易地帮助您。
这是我的建议,可以在不知道您遇到的错误类型的情况下消除可能的错误。
import os, re
from datetime import date
from datetime import timedelta
directory = 'C:/Users/me/main folder/subfolder'
for originalName in os.listdir(directory):
print(f'original name is = {originalName}')
if originalName[-3:].lower() =='csv':
today = date.today()
yesterday = today - timedelta(days = 1)
yesterday_file_name = originalName[:-4]+yesterday.strftime("%m%d%Y")+'.csv'
os.rename(os.path.join(directory, originalName), os.path.join(directory, yesterday_file_name))
#print('formatted file names are')
#print(yesterday_file_name)
#here is the sample output
#original name is = holdings.csv
#formatted file names are
#holdings01112022.csv
#original name is = transactions.CSV
#formatted file names are
#transactions01112022.csv
这是一个关于如何编写算法代码的简短示例。
import pathlib
from datetime import date, timedelta
if __name__ == '__main__':
directory = pathlib.Path('/Users/cesarv/Downloads/tmp')
yesterday = date.today() - timedelta(days=1)
for file in directory.glob('*[!0123456789].csv'):
new_path = file.with_stem(file.stem + yesterday.strftime('%m-%d-%Y'))
if not new_path.exists():
print(f'Renaming {file.name} to {new_path.name}')
file.rename(new_path)
else:
print(f'File {new_path.name} already exists.')
通过使用 pathlib
,您将简化文件名和路径的处理,如果您 运行 在 Linux 或 macOS 上使用此程序,它的工作原理是一样的。
注意:
- 我们限制要处理的文件列表
glob()
,其中模式 *[!0123456789].csv
表示“所有不以后缀前的数字结尾的文件名([!0123456789]
代表一个字符,在后缀之前,不应 - ! - 等于括号中的任何字符)。”这允许您只处理名称中不包含日期的文件。
for
循环给出的元素,用file
变量引用,是classPath
的对象,它给了我们可以工作的方法和属性与,例如 with_stem()
和 stem
.
- 我们创建了一个新的
Path
对象,new_path
,它将把它的词干(没有后缀 .csv
的文件名部分)重命名为原始文件名(file.name
) 加上你需要的格式的昨天,方法是 with_stem()
.
- 由于这个新的
Path
对象包含与原始文件相同的路径,我们可以用它来重命名原始文件。
- 如您所见,我们还可以使用
exists()
方法在重命名之前检查是否存在具有新名称的文件。
您还可以查看 pathlib 上的文档。
如有疑问,请尽管提问!
我正在努力解决工作中的问题,我不是开发人员,但从事一般 IT 运营工作,我想在这里和那里学习一些东西,所以我现在可能离我的目标还很远我想在这里做。我刚刚一直在利用在线资源,这里还有一点来自《用 Python 自动化无聊的东西》一书。这是我的 objective:
我有两个文件使用 post 处理器每天早上同时自动放在我电脑上的一个文件夹中,我需要在我之前将昨天的日期添加到文件名的末尾将它们上传到 FTP 服务器,我每天早上大约在同一时间这样做。我正在尝试编写一个 Python 脚本,我可以在文件放入文件夹后立即以某种方式安排到 运行,这将以 MMDDYYYY 格式附加昨天的日期。例如,如果文件夹中的文件名为“holdings.CSV”和“transactions.CSV”,我需要将它们重命名为“holdings01112022.CSV”和“[=21=” ]”。我只想重命名文件夹中的新文件,前几天已经附加日期的文件将保留在文件夹中。再一次,我是一个完全的初学者,所以我的代码可能没有意义并且可能有多余或多余的行,我很乐意更正......我在这里走的路是正确的,我完全离开了吗?有什么建议吗?
import os, re
from datetime import date
from datetime import timedelta
directory = 'C:\Users\me\main folder\subfolder'
filePattern = re.compile('%s.CSV', re.VERBOSE)
for originalName in os.listdir('.'):
mo = filePattern.search(originalName)
if mo == None:
continue
today = date.today()
yesterday = today - timedelta(days = 1), '%M%D%Y'
for originalName in directory:
newName = originalName + yesterday
os.rename(os.path.join(directory, originalName), os.path.join(directory, newName))
感谢任何帮助。谢谢
你运行有什么问题吗?如果您只想获取 csv 文件,则可以使用一个 if 语句而不是使用正则表达式来简化代码。在将日期添加到文件名之前,您还需要将日期转换为字符串。 (即:newName = originalName[:-3] +str(yesterday))。
如果此代码没有解决您的问题,请提及您收到的错误,以便其他人更容易地帮助您。
这是我的建议,可以在不知道您遇到的错误类型的情况下消除可能的错误。
import os, re
from datetime import date
from datetime import timedelta
directory = 'C:/Users/me/main folder/subfolder'
for originalName in os.listdir(directory):
print(f'original name is = {originalName}')
if originalName[-3:].lower() =='csv':
today = date.today()
yesterday = today - timedelta(days = 1)
yesterday_file_name = originalName[:-4]+yesterday.strftime("%m%d%Y")+'.csv'
os.rename(os.path.join(directory, originalName), os.path.join(directory, yesterday_file_name))
#print('formatted file names are')
#print(yesterday_file_name)
#here is the sample output
#original name is = holdings.csv
#formatted file names are
#holdings01112022.csv
#original name is = transactions.CSV
#formatted file names are
#transactions01112022.csv
这是一个关于如何编写算法代码的简短示例。
import pathlib
from datetime import date, timedelta
if __name__ == '__main__':
directory = pathlib.Path('/Users/cesarv/Downloads/tmp')
yesterday = date.today() - timedelta(days=1)
for file in directory.glob('*[!0123456789].csv'):
new_path = file.with_stem(file.stem + yesterday.strftime('%m-%d-%Y'))
if not new_path.exists():
print(f'Renaming {file.name} to {new_path.name}')
file.rename(new_path)
else:
print(f'File {new_path.name} already exists.')
通过使用 pathlib
,您将简化文件名和路径的处理,如果您 运行 在 Linux 或 macOS 上使用此程序,它的工作原理是一样的。
注意:
- 我们限制要处理的文件列表
glob()
,其中模式*[!0123456789].csv
表示“所有不以后缀前的数字结尾的文件名([!0123456789]
代表一个字符,在后缀之前,不应 - ! - 等于括号中的任何字符)。”这允许您只处理名称中不包含日期的文件。 for
循环给出的元素,用file
变量引用,是classPath
的对象,它给了我们可以工作的方法和属性与,例如with_stem()
和stem
.- 我们创建了一个新的
Path
对象,new_path
,它将把它的词干(没有后缀.csv
的文件名部分)重命名为原始文件名(file.name
) 加上你需要的格式的昨天,方法是with_stem()
. - 由于这个新的
Path
对象包含与原始文件相同的路径,我们可以用它来重命名原始文件。 - 如您所见,我们还可以使用
exists()
方法在重命名之前检查是否存在具有新名称的文件。
您还可以查看 pathlib 上的文档。
如有疑问,请尽管提问!