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 之前加上 . 前缀什么都不做;如果 FileC:\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)))