使用 argparse,如何将用户输入放入列表中?
Using argparse, how can I put the user input into a list?
我需要文件路径,但 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)
您可以使用 os.path.abspath(f.name)
获取用于打开文件 f
的绝对文件路径。
但是,如果您还需要文件路径,那么不将类型转换为文件对象可能更简洁,稍后您自己执行此操作,而不是尝试对打开的文件的来源进行逆向工程。这样你就已经有了文件路径列表,例如:
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.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
其中 returns 只是路径的名称部分。
怎么样
os.path.realpath(f.name)
将当前 curpwd 与 f.name
中记录的文件名相结合。
如果这还不够稳健,您可以接受用户提供的文件名,然后自己打开文件。 FileType
不是必需的。它只是一种方便的类型,在接受输入和输出文件并用它们做一些简单事情的脚本中最有用。换句话说,模仿常见 bash
功能的脚本。
我需要文件路径,但 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)
您可以使用 os.path.abspath(f.name)
获取用于打开文件 f
的绝对文件路径。
但是,如果您还需要文件路径,那么不将类型转换为文件对象可能更简洁,稍后您自己执行此操作,而不是尝试对打开的文件的来源进行逆向工程。这样你就已经有了文件路径列表,例如:
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.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
其中 returns 只是路径的名称部分。
怎么样
os.path.realpath(f.name)
将当前 curpwd 与 f.name
中记录的文件名相结合。
如果这还不够稳健,您可以接受用户提供的文件名,然后自己打开文件。 FileType
不是必需的。它只是一种方便的类型,在接受输入和输出文件并用它们做一些简单事情的脚本中最有用。换句话说,模仿常见 bash
功能的脚本。