Python3 字符串格式为 .前面不见了
Python3 string formatting with . in front missing
我正在尝试编写一个文件传输程序并尝试列出要跳过处理的文件:脚本本身,以及 VI 备份和交换文件(server.py~ 和 .server.py.swp)
我无法获得 vi 交换文件的正确名称,.server.py.swp,开头的点丢失,我得到 server.py.swp
我首先使用 .server.py.swp 硬编码创建列表(我对其他列表进行了硬编码,但在我为它们设置了字符串格式后删除了它们)。然后我使用字符串格式添加脚本文件和备份文件。我附加字符串“test”用于调试目的和作为分隔符。最后,我尝试使用两种不同的方法添加具有字符串格式的交换文件,并且它添加了前导 .前面不见了。
给运行server.py中的代码我指的是,我有一个client.py我正在开发中
client.py
import os, socket
port = 7777
host = socket.gethostname()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
server.py
import os, socket
port = 7777
host = socket.gethostname()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
while True:
clientsocket, address = s.accept()
print(f"Connection from {address} has been established!!!")
#
File = os.path.realpath(__file__)
dir = os.path.dirname(File)
os.chdir(dir)
server_files = os.listdir(".")
skip = [".server.py.swp"]
# https://pythonguides.com/python-get-filename-from-the-path/
skip.append(os.path.basename(File))
skip.append(os.path.basename(f"{File}~"))
skip.append(f"test")
skip.append(os.path.basename(f".{File}.swp"))
skip.append(os.path.basename(".{}.swp".format(File)))
print(f"Skip: {skip}")
# !End
我在服务器上得到错误的输出
Skip: ['.server.py.swp', 'server.py', 'server.py~', 'test', 'server.py.swp', 'server.py.swp']
我想要的输出类似于
Skip: ['.server.py.swp', 'server.py', 'server.py~', 'test', '.server.py.swp', '.server.py.swp']
我错过了什么吗?我试着逃避 .输入 \.
无济于事。
编辑:我的目标是跨平台,但现在我正在 Windows.
上开发和测试这个
鉴于 File
似乎是一个合格的路径,而不仅仅是一个文件名,在调用 basename
之前加上 .
前缀什么都不做;如果 File
是 C:\foo\bar.py
(将打印额外的 \
s)或 /foo/bar.py
甚至 ../relative/bar.py
,用 .
作为前缀将它放在最终目录分隔符(\
或 /
),它被 basename
删除。如果要在 file 名称前加上 .
,请将其添加到 after 剥离目录,例如:
skip.append("." + os.path.basename(f"{File}.swp"))
或
skip.append(".{}.swp".format(os.path.basename(File)))
我正在尝试编写一个文件传输程序并尝试列出要跳过处理的文件:脚本本身,以及 VI 备份和交换文件(server.py~ 和 .server.py.swp)
我无法获得 vi 交换文件的正确名称,.server.py.swp,开头的点丢失,我得到 server.py.swp
我首先使用 .server.py.swp 硬编码创建列表(我对其他列表进行了硬编码,但在我为它们设置了字符串格式后删除了它们)。然后我使用字符串格式添加脚本文件和备份文件。我附加字符串“test”用于调试目的和作为分隔符。最后,我尝试使用两种不同的方法添加具有字符串格式的交换文件,并且它添加了前导 .前面不见了。
给运行server.py中的代码我指的是,我有一个client.py我正在开发中
client.py
import os, socket
port = 7777
host = socket.gethostname()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
server.py
import os, socket
port = 7777
host = socket.gethostname()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
while True:
clientsocket, address = s.accept()
print(f"Connection from {address} has been established!!!")
#
File = os.path.realpath(__file__)
dir = os.path.dirname(File)
os.chdir(dir)
server_files = os.listdir(".")
skip = [".server.py.swp"]
# https://pythonguides.com/python-get-filename-from-the-path/
skip.append(os.path.basename(File))
skip.append(os.path.basename(f"{File}~"))
skip.append(f"test")
skip.append(os.path.basename(f".{File}.swp"))
skip.append(os.path.basename(".{}.swp".format(File)))
print(f"Skip: {skip}")
# !End
我在服务器上得到错误的输出
Skip: ['.server.py.swp', 'server.py', 'server.py~', 'test', 'server.py.swp', 'server.py.swp']
我想要的输出类似于
Skip: ['.server.py.swp', 'server.py', 'server.py~', 'test', '.server.py.swp', '.server.py.swp']
我错过了什么吗?我试着逃避 .输入 \.
无济于事。
编辑:我的目标是跨平台,但现在我正在 Windows.
上开发和测试这个鉴于 File
似乎是一个合格的路径,而不仅仅是一个文件名,在调用 basename
之前加上 .
前缀什么都不做;如果 File
是 C:\foo\bar.py
(将打印额外的 \
s)或 /foo/bar.py
甚至 ../relative/bar.py
,用 .
作为前缀将它放在最终目录分隔符(\
或 /
),它被 basename
删除。如果要在 file 名称前加上 .
,请将其添加到 after 剥离目录,例如:
skip.append("." + os.path.basename(f"{File}.swp"))
或
skip.append(".{}.swp".format(os.path.basename(File)))