【问题标题】:Python: How to capitalize the first column of a .txt file.Python:如何将 .txt 文件的第一列大写。
【发布时间】:2016-01-10 20:24:04
【问题描述】:

我有一个.csv 格式的.txt 文件。我正在考虑以.capitalize 第一列中的文本的最佳方式。

.capitalize() 是一个字符串方法,所以我考虑了以下内容;我需要打开文件,将数据转换为字符串列表,将所需单词大写,最后将数据写回文件。

为此,我做了以下工作:

newGuestList = []
with open("guestList.txt","r+") as guestFile :
guestList = csv.reader(guestFile)
for guest in guestList :
    for guestInfo in guest :
        capitalisedName = guestInfo.capitalize()
        newGuestList.append(capitalisedName)

输出如下:
[‘Peter’, ‘35’, ‘ spain’, ‘Caroline’, ‘37’, ‘france’, ‘Claire’,’32’, ‘ sweden’]

问题:

首先;为了将这个新列表写回文件,我需要将其转换为字符串。我可以使用.join 方法来实现这一点。但是,如何在每三个单词(国家/地区)之后引入一个换行符 \n,以便每个客人在文本文件中都有自己的行?

其次;这种嵌套forloops等的方法似乎非常复杂,有没有更干净的方法?

我的.txt 文件: 彼得,35 岁,西班牙\n 卡罗琳,37 岁,法国\n 克莱尔,32 岁,瑞典\n

【问题讨论】:

  • 如果文件已经包含新行。我会用2个文件来做。从一个读取行,将其大写并将其写到另一个。 (如果非常大的文件可能希望以 100 行或更多行为单位进行读/写)。如果你想要大写字母,也许国家也一样。

标签: python string text multiple-columns


【解决方案1】:

您不需要拆分行,因为第一个单词的第一个字符是该行的第一个字符:

with open("lst.txt","r") as guestFile :
    lines=guestFile.readlines()
    newlines=[line.capitalize() for line in lines]
with open("lst.txt","w") as guestFile :
    guestFile.writelines(newlines)   

【讨论】:

  • 我会使用[line.capitalize() for line in lines],它更清晰,不会影响内置str
  • 您也可以删除lines=guestFile.readlines() 并执行[line.capitalize() for line in guestFile]
  • @B.M.见谅,我是编程新手,看不懂newlines=[line.capitalize() for line in lines]这行代码。我以前没有遇到过这种语法。 line 似乎是一个关键字,尽管我在文档中找不到它。?我很困惑。
  • 这是一个理解列表。你可以简单地写:newlines=[];for line in lines: newlines.append(line.capitalize()),它做同样的工作。
  • 看来我接下来需要学习理解列表!非常感谢 B.M.
【解决方案2】:

您可以只使用 CSV 读取器和写入器,然后从列表中访问要大写的元素。

import csv
import os

inp = open('a.txt', 'r')
out = open('b.txt', 'w')

reader = csv.reader(inp)
writer = csv.writer(out)

for row in reader:
    row[0] = row[0].capitalize()
    writer.writerow(row)

inp.close()
out.close()

os.rename('b.txt', 'a.txt') # if you want to keep the same name

【讨论】:

  • 当 a.txt 已经存在时,os.rename 在 Windows 下将不起作用。
猜你喜欢
  • 1970-01-01
  • 2020-12-07
  • 2018-01-05
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多