【问题标题】:How to print certain specific character from row to column?如何从行到列打印某些特定字符?
【发布时间】:2020-10-30 23:59:05
【问题描述】:

我有一个输入文件,其中包含 5 行重复的相同格式的数据。我需要将这些数据格式化为一行(CSV 文件),并且只有几个与我相关的字段。如何使用提供的输入文件实现上述输出。

注意 - 我对学习任何语言都很陌生,并且还没有达到如此深入的细节来编写自己的语言。我已经编写了导入输入文件的代码,到达一个特定的单词,然后打印其余数据(这是我需要帮助的地方,因为我不需要输入中的所有信息作为使用空间是分隔符没有在正确的列中给出输出)。我还编写了将输出写入 csv 文件的代码。

注意 2 - 我也很喜欢这个论坛,如果我在发布查询时发过任何帖子,请原谅。

输入 - Input File

输出 - Output File

import itertools, csv

【问题讨论】:

  • 嗨!您愿意提供您目前所做的解决方案吗?
  • 嗨亚历山德罗,请在实际问题中找到迄今为止的进展,但它没有给出所需的输出。

标签: python string csv input text


【解决方案1】:

您应该读入文件并手动解析,然后使用csv 模块将其写入.csv 文件:

import re

with open('myfile.txt', 'r') as f:
    lines = f.readlines()

# divide on whitespace characters, but not single spaces
lines = [re.split("\s\s+", line) for line in lines]

with open('output.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for line in lines:
        writer.writerow(lines)

但这将包括每条数据。您可以遍历lines 并删除您不想保留的字段。所以在你写 csv 之前,你可以这样做:

def filter_line(line):
    # see how the input file was parsed
    print(line)
    # for example, only keep the first 2 columns
    return [line[0], line[1]]

lines = [filter_line(line) for line in lines]

【讨论】:

  • 感谢 dogman288 的快速回复,在第 3 行的输入文件中,我们有“LIVING TOGETHER”,而在第 8 行,我们只有“LIVING”。如果我们使用“空格”作为分隔符,LIVING 和 TOGETHER 会打印在 2 列中,但我希望它们都在一个列中。
  • 我明白了,没有输入和输出的文本有点难以分辨(将来您应该上传文本而不是图像)。对于您需要的复杂拆分(即在空格上拆分,但不是在单个空格上拆分,您应该使用正则表达式。请参阅更新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2018-10-21
相关资源
最近更新 更多