繁体   English   中英

编辑每行文本文件的最后一个元素

[英]Edit last element of each line of text file

我有一个包含一些元素的文本文件;

0,The Hitchhiker's Guide to Python,Kenneth Reitz,2/4/2012,0
1,Harry Potter,JK Rowling,1/1/2010,8137
2,The Great Gatsby,F. Scott Fitzgerald,1/2/2010,0
3,To Kill a Mockingbird,Harper Lee,1/3/2010,1828

这些列表的最后一个元素确定哪个用户取出了给定的书。 如果为 0,则没有人拥有它。 我想要一个代码来将任何给定行的 ',0' 替换为输入的 4 位数字,以显示有人已取出这本书。

我已经使用 .replace 将它从 1828 更改为 0,但是我不知道如何将特定行的最后一个元素从 0 更改为其他内容。

由于工作/教育限制,我无法使用 csv,因此我必须将文件保留为 .txt 格式。

我也只能使用标准 python 库,因此没有熊猫。

您可以使用read_csvtxt捕获到数据帧中:

import pandas as pd


df = pd.read_csv("text_file.txt", header=None)
df.columns = ["Serial", "Book", "Author", "Date", "Issued"]
print(df)
df.loc[3, "Issued"] = 0
print(df)
df.to_csv('text_file.txt', header=None, index=None, sep=',', mode='w+')

这将第三本书的发行计数替换为 0。

Serial                              Book               Author      Date  \
0       0  The Hitchhiker's Guide to Python        Kenneth Reitz  2/4/2012   
1       1                      Harry Potter           JK Rowling  1/1/2010   
2       2                  The Great Gatsby  F. Scott Fitzgerald  1/2/2010   
3       3             To Kill a Mockingbird           Harper Lee  1/3/2010   

   Issued  
0       0  
1    8137  
2       0  
3    1828  

   Serial                              Book               Author      Date  \
0       0  The Hitchhiker's Guide to Python        Kenneth Reitz  2/4/2012   
1       1                      Harry Potter           JK Rowling  1/1/2010   
2       2                  The Great Gatsby  F. Scott Fitzgerald  1/2/2010   
3       3             To Kill a Mockingbird           Harper Lee  1/3/2010   

   Issued  
0       0  
1    8137  
2       0  
3       0  

评论后编辑:如果您只需要使用 python 标准库,您可以使用文件读取执行以下操作:

import fileinput

i = 0
a = 5 # line to change with 1 being the first line in the file
b = '8371'
to_write = []

with open("text_file.txt", "r") as file:
    for line in file:
        i += 1
        if (i == a):
            print('line before')
            print(line)
            line = line[:line.rfind(',')] + ',' + b + '\n'
            to_write.append(line)
            print('line after edit')
            print(line)
        else:
            to_write.append(line)
print(to_write)

with open("text_file.txt", "w") as f: 
    for line in to_write:
            f.write(line)

文件内容

0,The Hitchhiker's Guide to Python,Kenneth Reitz,2/4/2012,0
1,Harry Potter,JK Rowling,1/1/2010,8137
2,The Great Gatsby,F. Scott Fitzgerald,1/2/2010,84
3,To Kill a Mockingbird,Harper Lee,1/3/2010,7895
4,XYZ,Harper,1/3/2018,258
5,PQR,Lee,1/3/2019,16

将此作为输出

line before
4,XYZ,Harper,1/3/2018,258

line after edit
4,XYZ,Harper,1/3/2018,8371

["0,The Hitchhiker's Guide to Python,Kenneth Reitz,2/4/2012,0\n", '1,Harry Potter,JK Rowling,1/1/2010,8137\n', '2,The Great Gatsby,F. Scott Fitzgerald,1/2/2010,84\n', '3,To Kill a Mockingbird,Harper Lee,1/3/2010,7895\n', '4,XYZ,Harper,1/3/2018,8371\n', '5,PQR,Lee,1/3/2019,16\n', '\n']

你可以试试这个:

to_write = []
with open('read.txt') as f:  #read input file
    for line in f:
        if int(line[-2]) ==0:
            to_write.append(line.replace(line[-2],'1234'))  #any 4 digit number
        else:
            to_write.append(line)


with open('output.txt', 'w') as f:  #name of output file
    for _list in to_write:

            f.write(_list)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM