为什么在我向集合中添加相对路径字符串时反斜杠的数量会增加?
Why does the number of backslashes increase when I add a relative path string to the set?
我在执行这段代码时遇到了以下问题:
from os import path
import re
def main():
print('If you would like to clean some files from random noice, like "nan" types, just input
amount of files and correct paths to that files which you want to clean. Good luck!\n')
amount_of_files = input("Amount of your files, please: ")
if not amount_of_files.isdigit():
print("Input the correct amount of files")
return
print('')
set_of_files = set()
for i in range(int(amount_of_files)):
file_path = input(f'Your {i+1} file path: ')
if not path.isfile(file_path):
print(f"The '{file_path}' is incorrect or point to the nonexistent file, check doe's all you input is correct))...\n")
continue
print(file_path)
set_of_files.add(file_path)
print(set_of_files)
if __name__ == '__main__':
main()
我输入(例如).\train.csv
并得到这个答案:
.\train.csv
{'.\\train.csv'}
如您所见,反斜杠的数量增加了一倍,但是当我将与“.\train.csv”完全相同的字符串添加到集合中而不执行上面的所有代码时,反斜杠的数量会增加不是双倍的,例如 运行 这个代码:
set_0 = set()
set_0.add(".\train.csv")
print(set_0)
我反而得到:
{'.\train.csv'}
我不明白为什么会这样,可能与什么有关。事实上,没有任何显着变化。在第一种情况下,我们只是从输入字符串中获取我们的路径,然后简单地将它添加到集合中。在第二种情况下,我们只是将相同的确切路径添加到同一组,但第一种情况下的反斜杠数量由于某种原因发生了变化。这是为什么?
这是因为 \
是一个 'escape character'。 \
后跟一些选定的字符会给出很多不同的结果。例如,\n
给出一个换行符,\t
给出一个制表符,\a
给出一个 'bell' 声音。您可以在网上轻松找到这些特殊转义字符序列的完整列表。
因此,由于 '\train'
实际上意味着 '<tab>rain'
,python 会自动转义 '\'
。因此,'\'
不是转义字符,而只是一个 '\'
。您可以通过 print('\')
'
检查这个(以及所有其他)
当您执行 print(set_0)
时,它会按原样打印整个集合,您可以查看 set
[=42] 的 __str__
和 __repr__
方法=]知道怎么做。
但是,当您这样做时:
for i in set_0:
print(i)
你得到,. rain.csv
,这表明当你直接添加 \t
时,它被读取为 tab
。
我在执行这段代码时遇到了以下问题:
from os import path
import re
def main():
print('If you would like to clean some files from random noice, like "nan" types, just input
amount of files and correct paths to that files which you want to clean. Good luck!\n')
amount_of_files = input("Amount of your files, please: ")
if not amount_of_files.isdigit():
print("Input the correct amount of files")
return
print('')
set_of_files = set()
for i in range(int(amount_of_files)):
file_path = input(f'Your {i+1} file path: ')
if not path.isfile(file_path):
print(f"The '{file_path}' is incorrect or point to the nonexistent file, check doe's all you input is correct))...\n")
continue
print(file_path)
set_of_files.add(file_path)
print(set_of_files)
if __name__ == '__main__':
main()
我输入(例如).\train.csv
并得到这个答案:
.\train.csv
{'.\\train.csv'}
如您所见,反斜杠的数量增加了一倍,但是当我将与“.\train.csv”完全相同的字符串添加到集合中而不执行上面的所有代码时,反斜杠的数量会增加不是双倍的,例如 运行 这个代码:
set_0 = set()
set_0.add(".\train.csv")
print(set_0)
我反而得到:
{'.\train.csv'}
我不明白为什么会这样,可能与什么有关。事实上,没有任何显着变化。在第一种情况下,我们只是从输入字符串中获取我们的路径,然后简单地将它添加到集合中。在第二种情况下,我们只是将相同的确切路径添加到同一组,但第一种情况下的反斜杠数量由于某种原因发生了变化。这是为什么?
这是因为 \
是一个 'escape character'。 \
后跟一些选定的字符会给出很多不同的结果。例如,\n
给出一个换行符,\t
给出一个制表符,\a
给出一个 'bell' 声音。您可以在网上轻松找到这些特殊转义字符序列的完整列表。
因此,由于 '\train'
实际上意味着 '<tab>rain'
,python 会自动转义 '\'
。因此,'\'
不是转义字符,而只是一个 '\'
。您可以通过 print('\')
'
当您执行 print(set_0)
时,它会按原样打印整个集合,您可以查看 set
[=42] 的 __str__
和 __repr__
方法=]知道怎么做。
但是,当您这样做时:
for i in set_0:
print(i)
你得到,. rain.csv
,这表明当你直接添加 \t
时,它被读取为 tab
。