【问题标题】:Character with Variable Spacing具有可变间距的字符
【发布时间】:2021-07-23 17:13:55
【问题描述】:

我问了一个类似的(ish)问题here,但感觉好像这可能足够不同(并且不是 R 独有的),它可能需要自己的问题。

简而言之,我需要一个格式如下的 .txt 文件:

第 1 列第 2 列

有两种规格:

  1. 第 1 列和第 2 列必须对齐。这意味着第 1 列和第 2 列中每个值的起始字符必须垂直对齐。

  2. 只有一个字符可以分隔第 1 列和第 2 列。这与第 1 列中值的长度无关(长度不同)。

使用text comparing website,我发现“成功”文件(左)和“不成功”文件(右,用可变数量的“空格”字符分隔两列)之间的区别是某种分隔两列的单个字符。所述字符的感知宽度根据第 1 列中值的长度而变化。

有什么方法可以遍历一个 .txt 文件,该文件用可变数量的“空格”字符(基本上是右侧的文件)分隔两列,并将其替换为离开了吗?

【问题讨论】:

  • 您可能正在谈论一个标签。但无论如何,您想要的是以特定方式显示您的数据,并且您的文件包含 存储的数据 - 这是两个不同的东西。
  • 那么您是在寻求 Python 还是 R 中的解决方案?
  • @fsimonjetz 都可以。原始数据框在 R 中,但我更喜欢 Python。
  • @ThierryLathuille 是的 - 这是一种看待问题的建设性方式。我有什么办法可以修复数据的显示吗?在以下链接中查看解决方案(由 njp 提供)可能会有所帮助,以了解我当前如何输出数据:stackoverflow.com/questions/68492720/…

标签: python r


【解决方案1】:

根据您的其他问题clearly specifies,“多列文件必须用制表符分隔”,您需要此站点。因此,您需要做的就是用单个\t 替换值之间的空格。正如 Thierry Lathuille 评论的那样,它们是否在视觉上对齐并不重要——这只是您的文本编辑器所做的事情。 (您可以在大多数编辑器的设置中更改选项卡的宽度,使其“看起来对齐”。)

这是 Python 中的(故意冗长)解决方案,关键步骤是使用 split(),它消除了单词之间的所有空格,并用 '\t'.join() 重新组合每一行。

new_data = list()

with open("data.txt") as infile:
    for row in infile:
        row = row.strip()
        
        if row: # skips empty rows, if any occur
            row = '\t'.join(row.split())
            new_data.append(row)

with open("new_data.txt", mode="w") as outfile:
    print('\n'.join(new_data), file=outfile)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 2016-01-05
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2019-08-14
    相关资源
    最近更新 更多