Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-格式化一个大字符串_Python_String_Formatting - Fatal编程技术网

Python-格式化一个大字符串

Python-格式化一个大字符串,python,string,formatting,Python,String,Formatting,我有一长串农场动物,看起来像这样:在农场动物前面有\n\n\n和\t Farm Animals F M Total Cow 11 10 21 Horse

我有一长串农场动物,看起来像这样:在农场动物前面有\n\n\n和\t

                Farm Animals

                    F

                    M

                Total




Cow


                        11

                        10


                        21





Horse


                        3

                        6


                        9





Sheep


                        4

                        8


                        12





Goat


                        3

                        4


                        7





Chicken


                        1

                        1


                        2





Hen


                        5

                        7


                        12





Pig


                        3

                        7


                        10





Turkey


                        0

                        5


                        5





Cattle


                        1

                        1


                        2





Llama


                        3

                        5


                        8





Donkey


                        5

                        9


                        14





Duck


                        1

                        1


                        2




Total


                    40

                    64

104
我想使输出如下所示:

              Farm Animals     F     M    Total
                       Cow    11    12       23
                     Horse     5     5       10
                     Sheep     4    12       16
                                        .......
                     Total   108   134      242
到目前为止我所做的是

print(farmAnimalsString.strip().replace('\n\n','').replace('\t',' ').replace('\n\n\n','').replace('\n\n\n\n',''))
我当前的解决方案不一定能产生正确的输出,但它已经接近了。每个字段之间有不同数量的
\n
,这让我很棘手。所以,我想知道是否有更好的方法可以做到这一点,因为我所能想到的就是这种暴力方式,我认为这样做我将无法得到我想要的输出。。 提前谢谢

编辑:我刚刚意识到其中一个动物名字是两个词,比如“杰克兔” 所以当它打印出来的时候,看起来

Farm Animals F            M        Total       Jack
Rabbit       1            2           3        Snow
Bunny        0            1           1         Cow
0            1            1        Total          1
4            5

还有一个建议:

inString = inString.split()
for i in range(len(inString)-1):
  if inString[i].isalpha() and inString[i+1].isalpha() and len(inString[i])>=4 and len(inString[i+1])>=4:
    inString[i] = " ".join([inString[i], inString[i+1]])
    inString[i+1] = ""

inString = [i.replace("\n","").rjust(12, ' ') for i in inString if not i==""]

inString = "\n".join([" ".join(inString[i*4:i*4+4]) for i in range(len(inString))]).replace("\n\n","")
print(inString)
输出:

Farm Animals            F            M        Total
         Cow           11           10           21
       Horse            3            6            9
       Sheep            4            8           12
        Goat            3            4            7
     Chicken            1            1            2
         Hen            5            7           12
         Pig            3            7           10
      Turkey            0            5            5
      Cattle            1            1            2
       Llama            3            5            8
      Donkey            5            9           14
        Duck            1            1            2
       Total           40           64          104

其中,
inString
是您的
farmanimalstring

如果您需要识别名称超过一个单词的动物,这有点棘手。然而,如果我们利用所有剩余字段都是数字这一事实,我们就可以使用它来区分案例。下面的代码正是这样做的:

words = animal_str.split()[5:]
headers = ['Farm Animals', 'F', 'M', 'Total']
fields = []

it = iter(words)
try:
    while True:
        row = []
        animal = []
        while True:
            n = next(it)
            try:
                x = int(n)
                row.append(' '.join(animal))
                row.append(x)
                break
            except ValueError:
                animal.append(n)

        row.append(int(next(it)))
        row.append(int(next(it)))
        fields.append(row)
except StopIteration:
    pass
每个外部while循环生成一行,并将结果存储到
字段中


关于如何生成表格化输出。如果将工作委托给一些现有的库,例如
制表

其效果如下所示:

In [9]: import tabulate

In [16]: fields
Out[16]: 
[['Cow', 11, 10, 21],
 ['Horse', 3, 6, 9],
 ['Sheep', 4, 8, 12],
 ['Goat', 3, 4, 7],
 ['Chicken', 1, 1, 2],
 ['Hen', 5, 7, 12],
 ['Pig', 3, 7, 10],
 ['Turkey', 0, 5, 5],
 ['Cattle', 1, 1, 2],
 ['Llama', 3, 5, 8],
 ['Donkey', 5, 9, 14],
 ['Duck', 1, 1, 2],
 ['Jack Rabbit', 1, 2, 3],
 ['Total', 40, 64, 104]]

In [18]: print tabulate.tabulate(fields, headers=headers, tablefmt='plain', stralign='right')
  Farm Animals    F    M    Total
           Cow   11   10       21
         Horse    3    6        9
         Sheep    4    8       12
          Goat    3    4        7
       Chicken    1    1        2
           Hen    5    7       12
           Pig    3    7       10
        Turkey    0    5        5
        Cattle    1    1        2
         Llama    3    5        8
        Donkey    5    9       14
          Duck    1    1        2
   Jack Rabbit    1    2        3
         Total   40   64      104

这应该可以满足您的要求。

我刚刚意识到有些动物有两个字母的名字,我在我的edit@Gus我编辑了我的答案,将填充
if
条件的所有相邻单词连接起来。它应该适用于您的情况,但是,如果有问题,请告诉我。