1

我想使用 python 脚本以特定顺序对齐文件每一列中的所有字符串。我已经使用示例场景描述了问题和可能的结果。

#sample.txt

start() "hello"
appended() "fly"
instantiated() "destination"
do() "increment"
logging_sampler() "dummy string"

输出场景

#sample.txt(indented)

start()           "hello"
appended()        "fly"
instantiated()    "destination"
do()              "increment"
logging_sampler() "dummy string"

那么有没有可以处理文件并提供上述缩进的python库呢?是否有任何通用解决方案,如果我有一个包含超过 2 列的文件,并且我仍然可以以相同的方式缩进所有列?

4

3 回答 3

4

那么有没有可以处理文件并提供上述缩进的python库呢?

这可能吗?是的

你需要知道一种方法parse your line,然后display in a formatted manner

在您的特定情况下,parsing这很简单,因为您只需要根据第一个出现的空间拆分字符串。这可以使用str.partition轻松完成。有时您甚至可能需要一些奇特的解析逻辑,您可能需要使用regex

Formatting如果您知道Format String Syntax ,那就更简单了。

演示

>>> for e in st.splitlines():
    left,_,right = e.partition(' ')
    print "{:<20}{:<20}".format(left, right)


start()             "hello"             
appended()          "fly"               
instantiated()      "destination"       
do()                "increment"         
logging_sampler()   "dummy string"  
于 2013-09-30T09:46:28.043 回答
1

改编自这个这里的一个函数接受一个字符串列表的列表,并返回一个列表格式化的行。

def table(lines, delim='\t'):
    lens = [len(max(col, key=len)) for col in zip(*lines)]
    fmt = delim.join('{:' + str(x) + '}' for x in lens)
    return [fmt.format(*line) for line in lines]

其余的都是微不足道的:

import re
with open(__file__) as fp:
    lines = [re.split(r' ', s.strip(), maxsplit=1) for s in fp]
print '\n'.join(table(lines))

http://ideone.com/9WucPj

于 2013-09-30T10:34:06.790 回答
0

您可以在打印中使用制表符(“\t”),但我不清楚您是如何打印 sample.txt 的。

print string1+"\t"+string2

请参阅此处了解更多详细信息

于 2013-09-30T09:46:50.533 回答