使用argparse,如何将用户输入放入列表?

2024-06-02 05:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要文件路径,os.path.dirname没有给我完整的路径(它不包括文件本身-例如,home/a/b而不是home/a/b/filename)。我还需要文件名以便以后打印。由于用户输入的参数是文件名,所以我需要一种将输入存储到列表中的方法。在

import sys
import argparse
import inspect, os
import os.path

file_list = []

if __name__ == '__main__':
    parser = argparse.ArgumentParser()      
    parser.add_argument('file', type=argparse.FileType('r'), nargs='*')
    args = parser.parse_args()

    for f in args.file:
        with f:
            data = f.read()
            print data
            x = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
            print x
            file_list.append(x+#I need the filename here)

Tags: 文件pathimport路径parserhomeos文件名
3条回答

您可以使用os.path.abspath(fl.name)获取文件处理程序的完整路径, 所以这应该是有效的:

import sys
import argparse
import inspect, os
import os.path

file_list = []

if __name__ == '__main__':
    parser = argparse.ArgumentParser()      
    parser.add_argument('file', type=argparse.FileType('r'), nargs='*')
    args = parser.parse_args()

    for f in args.file:
        with f:
            data = f.read()
            print data
            full_path = os.path.abspath(f)
            file_list.append(full_path)

为了将来的参考,请注意os.path.basename,它只返回路径的名称组件。在

您可以使用os.path.abspath(f.name)获得用于打开文件f的绝对文件路径。在

但是,如果您还需要filepath,那么最好不要将类型转换为fileobject,然后自己执行,而不是尝试对打开的文件进行反向工程。这样您就已经有了文件路径的列表,例如:

file_list = []

parser = argparse.ArgumentParser()      
parser.add_argument('file', nargs='*')
args = parser.parse_args()

for filepath in args.file:
    x = os.path.abspath(filepath)
    with open(filepath, 'r') as f:
        data = f.read()
        print data
        file_list.append(x)

怎么样

os.path.realpath(f.name)

它将当前curpwd与f.name中记录的文件名相结合。在

如果这不够健壮,您可以接受用户的文件名,然后自己打开文件。^{cd2>不是必需的。它只是一种方便的类型,在获取输入和输出文件并对它们执行简单操作的脚本中最有用。换言之,是对通用bash函数进行初始化的脚本。在

相关问题 更多 >