【问题标题】:How can i align replaced text file in python?如何在python中对齐替换的文本文件?
【发布时间】:2021-09-02 08:09:37
【问题描述】:

我更改了部分列数据,但是当我替换它时,新文件文本中的列不对齐。 我将文件(输入、输出文件)发送给您,您也可以看到下图。 谢谢你的回答!

注意:我在 datar.csv 中读取了两列

你可以看到文件:https://www.shorturl.at/luFX7

import pandas as pd
df = pd.read_csv('datar.csv')
j=0
#input file
fin = open("input.txt", "rt")
#output file to write the result to
fout = open("output.txt", "wt")
#for each line in the input file
for line in fin:
    ori= df["data_o"][j]
    ori=str(ori)
    ree= df["data_r"][j]
    ree=str(ree)
    fout.write(line.replace(ori,ree))
    j=j+1
fin.close()
fout.close()

I want it to be like this picture

【问题讨论】:

  • 你需要编写代码,这显然没有尝试过。
  • 您能否进一步详细说明您的问题?
  • 我们需要更多信息才能回答您的问题。你试过什么?你预计会发生什么?
  • 您好,问题的数据已经更新,谢谢您的回答!

标签: python text alignment


【解决方案1】:

好的,
您的代码有一种更复杂的方法,但我相信它会起作用。
该程序将为每列设置一个默认宽度。

import pandas as pd
df = pd.read_csv('datar.csv')
j=0

with open("input.txt", "rt") as fino:
    fin = fino.read()                      # !!!
fin = fin.split("\n")                      # !!!

fout = open("output.txt", "wt")
out = [[]] * len(fin)                      # !!!

# --- decode part ---
iter_count = 0                             # !!!
for line in fin:
    ori= df["data_o"][j]
    ori=str(ori)
    ree= df["data_r"][j]
    ree=str(ree)
    line = line.replace(ori, ree)
    line = line.split(" ")
    while "" in line: line.remove("")
    out[iter_count].append(line)
    iter_count += 1

# --- padding part ---
column_count = len(out[0])
row_count = len(out)
for column in range(column_count):
    maxl = []
    for row in range(row_count):
        maxl.append(len(out[row][column]))
    maxl = max(maxl) + 1
    for row in range(row_count):
        pad = " " * (maxl - len(out[row][column]))
        out[row][column] = pad + out[row][column]

# --- writting part ---
for row in out:
    for num in row:
        fout.write(num)
    fout.write("\n")

注意,我修改了您原始代码的顶部。

如果你发表,请提及我。

【讨论】:

  • 对不起先生,但不是我要找的,你能看到我上传的图片吗,谢谢@123superfred。我很欣赏你的意愿。注意:代码存在字符串问题:TypeError: can only concatenate str (not "list") to str...
  • 哪一行? @蒂莫
  • 嗨@123superfred,我希望这样:i.stack.imgur.com/MbC3n.png
  • 你好@Timo。正如您在图像中看到的那样,您想要的结果中的每一列都没有相同的宽度,也没有相同的左填充。所以你不能让这个过程自动化。如果您真的想要输出图像,则需要手动指定文件所有列的宽度。
  • 嗨@123superfred,我试着这样做,谢谢你的帮助!
【解决方案2】:

也许添加一个默认宽度:

# e.g: 6 characters lenght
# [...] 
    line = line.replace(ori, ree)      # get line after convert
    line_original_width = len(line)    # get lenght of line
    if line_original_width < 6:        # check if fill is necessary
        fill = 6 - line_original_width # get amount of necessary fill
        line = (" " * fill) + line     # fill the left with space
    fout.write(line)                   # write all in the file
# [...]

否则,您可以使用f-string 执行相同的操作。但是我不能给你举个例子,因为我不是很擅长。

【讨论】:

  • 对不起先生,我解决不了问题,事实上,用这个程序,所有文件的位置都改变了。但我真的很感谢你的帮助。赞!
  • 好吧,当宽度在各处都不相同时,它会变得更加复杂。所以我强烈建议你保持默认宽度,这也将使你的代码最轻和最快。如果你真的想要不同的宽度,我有一些想法给你。请通过不和谐联系我。 (123superfred#7476)@JoséJunco
  • 哦!!!我理解我的错误。如果您同时解码文件 1 编号,则此代码(有一些扭曲)将起作用。在您的情况下,您正在通过迭代解码 1 行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2020-03-28
  • 2013-05-13
  • 2011-02-26
相关资源
最近更新 更多