【问题标题】:How to print the content of multiple command line arguments on the same line in python?如何在python的同一行上打印多个命令行参数的内容?
【发布时间】:2021-12-29 21:02:06
【问题描述】:

我想在同一行打印多个命令行参数(文本文件)的内容,并用空格将它们彼此隔开。这是我写的代码:


from sys import argv, exit

if len(argv) < 2:
    print("Missing command-line argument")
    exit(1)

argumentList = argv[1:]

for arg in argumentList:
    with open(arg, "r") as f:
        print(f.read())
    f.close()

它将每个文本文件打印在一个新行上,这不是我想要的。请帮忙!

编辑:谢谢大家的帮助。我的问题得到了解答!

【问题讨论】:

  • 使用print(f.read(), end=" ")
  • 我试过了,还是不行:/
  • 向我们展示您的输入和所需输出的示例,以便更好地理解。
  • 如果文件末尾包含换行符,那么您需要在打印之前将其去掉。尝试使用print(f.read().rstrip(), end=" ")
  • 也没有用。我在上面添加了输入和所需输出的示例

标签: python printing text-files command-line-arguments


【解决方案1】:

如果每个文件中的行数相同,请使用此代码。但是,一旦 Python 从 “with” 块中退出,文件就会自动关闭。所以,不要在“with”块中包含关闭函数。

readlines() 方法返回一个列表,其中包含文件中的每一行作为列表项。并且,结果变量将在每个索引处存储每个文件的列表。 例如。 [file1.readlines()、file2.readlines()、file3.readlines()...]

其中,type(result[0]) 是列表。然后根据它执行操作。

from sys import argv, exit

if len(argv) < 2:
    print("Missing command-line argument")
    exit(1)

argumentList = argv[1:]
result = []
for arg in argumentList:
    with open(arg, "r") as f:
        result.append(f.readlines())

total_lines = len(result[0])
total_items = len(result)

# finding maximum space for each file.
maximum_list = []
for item in range(total_items):
    maximum = 0
    for data in range(total_lines):
        result[item][data] = result[item][data].strip("\n")
        length = len(result[item][data])
        if length > maximum:
            maximum = length
    maximum_list.append(maximum)


for i in range(total_lines):
    count = 0
    while count < total_items:
        data = result[count][i]
        length_difference = maximum_list[count] - len(data) # For printing alignment
        print(data + (" " * length_difference), end=" ")
        count += 1
    print()
    

【讨论】:

  • 是的,所有文件的行数都相同。但是,我尝试了您的代码,但没有成功。我在上面发布了我一直在使用的东西,你介意看一下吗?无论哪种方式,我都感谢您的帮助。
  • 我更新了我的代码。请检查一次并告诉我它是否工作?而且,它给出了什么输出。现在这段代码将获取任意数量的文件并打印出来。
  • 不,它仍然不起作用。字母看起来很扭曲。
  • 是的,这是length_difference的错误。我更正了,现在检查一下。
  • 仍然不起作用,但有趣的是,您的代码现在吐出的结果与我的相同。我不确定那是什么意思。
【解决方案2】:

您必须将每个文件中的文本拆分为行列表并使用zip() 创建组(file_1_line1, file_2_line1)(file_1_line2, file_2_line2) 并在一行中打印每个组

W = """
#     #
#  #  #
# # # #
##   ##
#     #
"""

E = """
#######
#
#######
#
#######
"""

all_lines_W = W.split('\n')
all_lines_E = E.split('\n')

for line_w, line_e in zip(all_lines_W, all_lines_E):
    print(line_w, line_e)

结果:

#     # #######
#  #  # #
# # # # #######
##   ## #
#     # #######

对于更多字符/文件,您可以使用列表,for-loops 和 *args

W = """
#     #
#  #  #
# # # #
##   ##
#     #
"""

E = """
#######
#      
#######
#      
#######
"""

text = [W, E, E, E, W, E, E]
text = [char.split('\n') for char in text]

for lines in zip(*text):
    print(*lines)

结果:

#     # ####### ####### ####### #     # ####### #######
#  #  # #       #       #       #  #  # #       #      
# # # # ####### ####### ####### # # # # ####### #######
##   ## #       #       #       ##   ## #       #      
#     # ####### ####### ####### #     # ####### #######

这种类型的文本称为banner

Linux 甚至有特殊的程序可以在屏幕上显示横幅(或在打印机的长纸上打印)

也许您甚至可以找到 Python 模块来显示横幅。 IE。 pyfiglet


编辑:

文件数据的版本

from sys import argv, exit

if len(argv) < 2:
    print("Missing command-line argument")
    exit(1)

# --- read ---

text = []

for arg in argv[1:]:
    with open(arg, "r") as f:
        #text.append( f.read() )
        text.append( f.read().split('\n') )

# --- print ---

#text = [char.split('\n') for char in text]

for lines in zip(*text):
    print(*lines)
    #print( " ".join(lines) )

【讨论】:

  • 感谢您的帮助,弗拉斯。一般来说,我对编程有点陌生。我可以在我的帖子中编辑到目前为止我一直在使用的内容吗?也许你可以更好地指导我?
  • 在我的版本中,您只需先阅读所有文件并放入列表text。我添加了带有argv的版本
  • 非常感谢,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 2022-08-18
  • 2011-12-04
  • 2016-03-20
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多