Tom学编程 发表于 2020-8-25 17:46:19

求助

Q1:为什么运行结果中D:后面有两个反斜杠,哪里有问题?
Q2:为什么将初始目录设为D:时没有运行结果?



代码:
import os
catelogue = input('请输入待查找的初始目录:')
target_file = input('请输入需要查找的目标文件:')
def research(catelogue,target_file):
    catelogue1 = os.listdir(catelogue)
    for each in catelogue1:
      if each == target_file:
            print(catelogue+'\\'+target_file)
      else:
            folder = catelogue+'\\'+each
            if os.path.isdir(folder):
                research(folder,target_file)

research(catelogue,target_file)

运行结果:
请输入待查找的初始目录:D:\\A
请输入需要查找的目标文件:test.txt
D:\\A\B\test.txt
D:\\A\test.txt

Twilight6 发表于 2020-8-25 17:49:54


Q1:为什么运行结果中D:后面有两个反斜杠,哪里有问题?

请输入待查找的初始目录:D:\\A

因为你输入的时候是双斜杠

Q2:为什么将初始目录设为D:时没有运行结果?

D: 表示盘符,而不是路径,你应该输入 D:\ 才算是 D盘根目录

Tom学编程 发表于 2020-8-25 17:52:30

Twilight6 发表于 2020-8-25 17:49
请输入待查找的初始目录:D:\\A

因为你输入的时候是双斜杠


输入双斜杠不是为了转义吗?
而且小甲鱼的作业里给的示例也是双斜杠

昨非 发表于 2020-8-25 17:52:53

1、print(catelogue+'\\'+target_file)
这里的加号相当于字符串连接,不存在转义的情况,所以+“\\”就会打印出\\
2、这个说不太清,你可以理解为:输入内容作为os.listdir(catelogue)函数参数的固定要求

Twilight6 发表于 2020-8-25 17:52:53

本帖最后由 Twilight6 于 2020-8-25 17:53 编辑



关于问题二,建议不要输入整个盘,有些保护文件你打不开也会导致你报错的,而且你 D 盘内文件如果有点多,那代码执行的时间也比较耗时

Twilight6 发表于 2020-8-25 17:53:41

Tom学编程 发表于 2020-8-25 17:52
输入双斜杠不是为了转义吗?

你 input 输入的时候不需要你进行转义

Tom学编程 发表于 2020-8-25 17:56:23

https://fishc.com.cn/thread-45649-1-2.html
这节课的作业

Tom学编程 发表于 2020-8-25 17:57:40

Twilight6 发表于 2020-8-25 17:53
你 input 输入的时候不需要你进行转义

但是打印时需要啊

Tom学编程 发表于 2020-8-25 17:59:55

>>> print('D:\\A')
D:\A

如果直接打印这个字符串出来就是单斜杠

昨非 发表于 2020-8-25 18:00:42

Tom学编程 发表于 2020-8-25 17:57
但是打印时需要啊

字符串连接的时候也不用转义啊

Twilight6 发表于 2020-8-25 18:00:45

Tom学编程 发表于 2020-8-25 17:57
但是打印时需要啊



打印不正常打印吗,input 函数自动转义了

你执行这个代码就知道了:

user = input('>>>')
print()

输出结果:
>>>\
['\\']

Twilight6 发表于 2020-8-25 18:01:12

昨非 发表于 2020-8-25 18:00
字符串连接的时候也不用转义啊

字符串拼接时候是需要的

昨非 发表于 2020-8-25 18:02:48

Twilight6 发表于 2020-8-25 18:01
字符串拼接时候是需要的

在引号内部的时候不是直接作为整体的吗

昨非 发表于 2020-8-25 18:04:18

Twilight6 发表于 2020-8-25 18:01
字符串拼接时候是需要的

刚刚测试了,这一点之前没有注意过,多谢了

Twilight6 发表于 2020-8-25 18:05:08

昨非 发表于 2020-8-25 18:02
在引号内部的时候不是直接作为整体的吗


'D:'+'\'      # 会报错

'D:'+'\\'   # 不会报错,拼接需要转义

Twilight6 发表于 2020-8-25 18:06:29

Tom学编程 发表于 2020-8-25 17:59
如果直接打印这个字符串出来就是单斜杠

print 打印字符串时候没有打印出转义字符啊,所以你看上去只有一个 \ ,你弄成列表就能看见转义字符了

>>> print(['D:\\A'])
['D:\\A']

Tom学编程 发表于 2020-8-25 18:08:52

Twilight6 发表于 2020-8-25 18:00
打印不正常打印吗,input 函数自动转义了

你执行这个代码就知道了:


明白了,十分感谢!!
页: [1]
查看完整版本: 求助