【问题标题】:replace first character of each line in file python替换文件python中每一行的第一个字符
【发布时间】:2021-06-12 23:41:20
【问题描述】:

我正在尝试从多个 txt 文件中替换行中的一些第一个字符并使用此代码,但输出错误:

for filename in glob.glob('./labels/**/*.txt', recursive=True):
with open(filename, 'r') as f:
    original_lines = f.readlines()
with open(filename, 'w') as out:
    for line in original_lines:
        if line.startswith('0'):
            line0 = line
            out.write(line0)
        if line.startswith('1'):
            line1 = line
            out.write(line1)
        if line.startswith('2'):
            line2 = line
            out.write(line2)
        if line.startswith('3'):
            line3 = line
            out.write(line3)
        if line.startswith('5'):
            line4 = '4' + line[1:]
            out.write(line4)
        if line.startswith('7'):
            line5 = '5' + line[1:]
            out.write(line5)
        if line.startswith('9'):
            line6 = '6' + line[1:]
            out.write(line6)
        if line.startswith('10'):
            line7 = '7' + line[1:]
            out.write(line7)
        if line.startswith('11'):
            line8 = '8' + line[1:]
            out.write(line8)
        if line.startswith('12'):
            line9 = '9' + line[1:]
            out.write(line9)

如果我有这样的文件:

0 0.2 0.4 0.8

12 0.1 0.1 0.25

7 0.66 0.80 0.91

我希望输出是:

0 0.2 0.4 0.8

9 0.1 0.1 0.25

5 0.66 0.80 0.91

【问题讨论】:

  • 如果一行以 '12' 开头, .startswith('1') 和 .startswith('12') 都为真,这可以解释您的部分问题。
  • 是的,这是问题之一,我通过使用 line.split(' ') 解决了,谢谢。

标签: python python-3.x file-manipulation


【解决方案1】:

我认为您有一些切片问题,例如假设您的输入是 12 0.1 0.1 0.25 line[1:] 将是 2 0.1 0.1 0.25 因为您的输入是字符串。你可以使用类似的东西:

line = '12 0.1 0.1 0.25'.split(' ') #convert your string to a list

temp = int(line[0]) #get first element and convert to integer to make comparisons easier

if temp < 3:
    print(' '.join(line))
elif temp == 5: 
    line[0] = '4'
    print(' '.join(line))
elif temp == 7:
    line[0] = '5'
    print(' '.join(line))
elif temp > 8:
    line[0] =str(temp - 3)
    print(' '.join(line))

#Output: 

9 0.1 0.1 0.25

注意:在您的情况下,最好使用elif 而不是if,因为如果您的条件之一为真,则不会检查其余条件。更多信息here

【讨论】:

  • 谢谢,我一发帖就发现它会切片不好,我用 line.split(' ') 解决了它
猜你喜欢
  • 2015-03-28
  • 2012-04-25
  • 2020-06-12
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多