鱼C论坛

 找回密码
 立即注册
查看: 2378|回复: 7

请教下这个问题出在哪

[复制链接]
发表于 2023-12-1 16:32:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想在一个目录下建立一个“月份”的文件夹,然后想根据选择是几月份,再在这个文件夹下建立每天的文件夹,我写了一点点
但现在发现两个问题:
1】、提示建立成功,但是在“车作业”的目录下看不到这个文件夹
2】、用正则表达式,我提取不到“folder_name”这个字符串里面的数字。
麻烦大神帮我解答下,感谢!
  1. import os
  2. import re

  3. path= "F:\常用工作文档\车作业"

  4. folder_name = input("你想要做几月份的文件夹:")
  5. new_path = os.path.join(path, folder_name)

  6. try:
  7.     os.mkdir(folder_name)
  8.     print(f'成功创建了{folder_name}的文件夹')
  9. except FileExistsError as e:
  10.     print('文件夹已经存在!', str(e))

  11. month_num = r'd+'
  12. result = re.findall(month_num, folder_name)
  13. print(result)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-1 16:33:13 | 显示全部楼层
问题出在两个地方:

1. 在创建文件夹的时候,应该使用`new_path`而不是`folder_name`作为参数。修改代码为`os.mkdir(new_path)`。
2. 在正则表达式中,`r'd+'`应该是`r'\d+'`,即`\d`表示匹配数字,而`+`表示匹配一个以上的数字。修改代码为`month_num = r'\d+'`。另外,如果要提取其中的数字,可以通过`result[0]`来获取第一个匹配到的数字字符串。

修正后的代码如下:
  1. import os
  2. import re
  3. path= "F:/常用工作文档/车作业"
  4. folder_name = input("你想要做几月份的文件夹:")
  5. new_path = os.path.join(path, folder_name)
  6. try:
  7.     os.mkdir(new_path)
  8.     print(f'成功创建了{folder_name}的文件夹')
  9. except FileExistsError as e:
  10.     print('文件夹已经存在!', str(e))
  11. month_num = r'\d+'
  12. result = re.findall(month_num, folder_name)
  13. print(result[0])
复制代码

这样就能正确创建文件夹,并提取出输入的月份。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-4 07:58:24 | 显示全部楼层
FishC_GPT 发表于 2023-12-1 16:33
问题出在两个地方:

1. 在创建文件夹的时候,应该使用`new_path`而不是`folder_name`作为参数。修改代码为 ...

怪不得,我说我怎么建立的文件夹没有,原来是路径问题,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-4 07:58:32 | 显示全部楼层
曲折 发表于 2023-12-04 07:58
怪不得,我说我怎么建立的文件夹没有,原来是路径问题 ...

不客气!是的,路径问题很常见,经常容易被忽略。确保正确设置文件夹路径可以避免许多错误。如果还有其他问题,请随时提问,我会尽力帮助你。祝你编程愉快!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-4 08:45:41 | 显示全部楼层
我想给他优化下,但是又出问题了,提示:“    print(f'成功创建了{folder_name}的文件夹')
SyntaxError: expected 'except' or 'finally' block”

  1. import os
  2. import re

  3. path= "F:/常用工作文档/车作业"

  4. folder_name = input("你想要做几月份的文件夹:")
  5. new_path = os.path.join(path, folder_name)

  6. month_num = r'\d+'
  7. result = re.findall(month_num, folder_name)
  8. print(result[0])

  9. try:
  10.     # 判断有月份来建立文件夹数量
  11.     if result == 1 or result == 3 or result == 5 or result == 7 or result == 8 or result == 10 or result == 12:
  12.         Month_number = 32
  13.     elif result == 4 or result == 6 or result == 9 or result == 11:
  14.         Month_number = 31
  15.     elif result == 2:
  16.         Month_number = 29
  17.     elif result <= 0 or result > 12:
  18.         print('您输入的月份有错!')
  19.     elif FileExistsError:
  20.         print('文件夹已经存在!')
  21.     else:
  22.         os.mkdir(new_path)
  23.         print(f'成功创建了{folder_name}的文件夹')
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-4 08:46:00 | 显示全部楼层
曲折 发表于 2023-12-04 08:45
我想给他优化下,但是又出问题了,提示:“    print( ...

在你的代码中,出现了几个问题:

1. 在 `import os` 的行后,你用了一个错误的变量名 `repath`。应该将其改为 `path`,与后面的路径拼接一致。

2. 在判断月份的逻辑中,你使用了 `result` 来比较是否等于某个值。然而,`result` 是一个列表,不能直接与整数进行比较。你需要通过取列表中的第一个元素来进行比较,即 `result[0]`。

3. 在 `elif result  12:` 这一行,应该是 `elif result > 12:` 表示如果输入的月份大于12,则输出提示信息。

4. 在异常处理中的 `elif FileExistsError:`,`FileExistsError` 应该放在 `try` 块中的 `except` 块中处理,而不是放在判断月份的逻辑中。

修正后的代码如下:
  1. import os
  2. path = "F:/常用工作文档/车作业"
  3. folder_name = input("你想要做几月份的文件夹:")
  4. new_path = os.path.join(path, folder_name)
  5. month_num = r'\d+'
  6. result = re.findall(month_num, folder_name)
  7. try:
  8.     # 判断有月份来建立文件夹数量
  9.     if int(result[0]) == 1 or int(result[0]) == 3 or int(result[0]) == 5 or int(result[0]) == 7 or int(result[0]) == 8 or int(result[0]) == 10 or int(result[0]) == 12:
  10.         Month_number = 32
  11.     elif int(result[0]) == 4 or int(result[0]) == 6 or int(result[0]) == 9 or int(result[0]) == 11:
  12.         Month_number = 31
  13.     elif int(result[0]) == 2:
  14.         Month_number = 29
  15.     elif int(result[0]) > 12:
  16.         print('您输入的月份有错!')
  17.     else:
  18.         os.mkdir(new_path)
  19.         print(f'成功创建了{folder_name}的文件夹')
  20. except FileExistsError:
  21.     print('文件夹已经存在!')
复制代码

请注意,上述代码只解决了你提出的问题,在实际应用中可能还有其他需要考虑的因素。希望这次能够帮到你!如果还有其他问题,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-4 09:18:26 | 显示全部楼层
搞定了,改错的过程中也学习了很多只是,真的,有时候真的是思路大于基础知识!
  1. import os
  2. import re

  3. path= "F:/常用工作文档/车作业"

  4. folder_name = input("你想要做几月份的文件夹:")
  5. new_path = os.path.join(path, folder_name)

  6. month_num = r'\d+'
  7. result = re.findall(month_num, folder_name)
  8. print(type(result[0]))

  9. os.mkdir(new_path)
  10. print(f'成功创建了{folder_name}的文件夹')

  11. new_path2 = "F://常用工作文档/车作业/"+ folder_name + "/"
  12. #把得出的月份转化成整数
  13. new_result = int(result[0])

  14. # 判断有月份来建立文件夹数量
  15. if new_result == 1 or new_result == 3 or new_result == 5 or new_result == 7 or new_result == 8 or new_result == 10 or new_result == 12:
  16.     Month_number = 32
  17. elif new_result == 4 or new_result == 6 or new_result == 9 or new_result == 11:
  18.     Month_number = 31
  19. elif new_result == 2:
  20.     Month_number = 29
  21. elif new_result < 0 or new_result > 12:
  22.     print('您输入的月份有错!')



  23. for i in range(1,int(Month_number)):
  24.     isexits = os.path.exists(new_path2 +str(i))
  25.     if not isexits:
  26.         os.mkdir(new_path2 + str(i))
  27.         print("%s目录创建成功"%i)
  28.     else:
  29.         print("目录已经存在")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-4 09:18:44 | 显示全部楼层
曲折 发表于 2023-12-04 09:18
搞定了
import os
import re

path= "F:/常用工作 ...

太棒了,你成功解决了问题!你的代码已经能够根据输入的月份创建对应的文件夹,并判断文件夹是否已经存在。这是一个很好的优化。

不过,在使用 `os.mkdir` 创建文件夹之前,最好先判断一下该文件夹是否已经存在,以免出现异常。你可以使用 `os.path.exists` 函数来判断文件夹是否存在。我在你的代码中添加了这个判断,如下所示:
  1. import os
  2. path = "F:/常用工作文档/车作业"
  3. folder_name = input("你想要做几月份的文件夹:")
  4. new_path = os.path.join(path, folder_name)
  5. month_num = r'\d+'
  6. result = re.findall(month_num, folder_name)
  7. print(type(result))
  8. if not os.path.exists(new_path):
  9.     os.mkdir(new_path)
  10.     print(f'成功创建了{folder_name}的文件夹')
  11. else:
  12.     print('文件夹已经存在!')
  13. new_path2 = "F:/常用工作文档/车作业/" + folder_name + "/"
  14. # 把得出的月份转化成整数
  15. new_result = int(result)
  16. # 判断有月份来建立文件夹数量
  17. if new_result == 1 or new_result == 3 or new_result == 5 or new_result == 7 or new_result == 8 or new_result == 10 or new_result == 12:
  18.     Month_number = 32
  19. elif new_result == 4 or new_result == 6 or new_result == 9 or new_result == 11:
  20.     Month_number = 31
  21. elif new_result == 2:
  22.     Month_number = 29
  23. elif new_result < 0 or new_result > 12:
  24.     print('您输入的月份有错!')
  25. for i in range(1, int(Month_number)):
  26.     isexits = os.path.exists(new_path2 + str(i))
  27.     if not isexits:
  28.         os.mkdir(new_path2 + str(i))
  29.         print("%s目录创建成功" % i)
  30.     else:
  31.         print("目录已经存在")
复制代码

现在,代码会在创建文件夹之前检查它是否已经存在,并输出相应的结果。如果文件夹已经存在,则不会重复创建,并输出 "目录已经存在" 的提示。

希望这次的回答对你有所帮助。如果还有其他问题,请随时提问。祝你编程顺利!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 04:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表