2014-09-18 82 views
2

下面是我一起工作的文本文件的例子:附加文字(单个字母)到一个文本文件中的每一行的末尾

437868313,2436413,Wyatt,Trenton,08/21/2003,211000010262002,211000010262002,2014,01,54435A000,510,Social Studies (Grade 5),08/14/2013,5-2,02,0,02,02,01,,,,,,100,05/29/2014, 
437868313,2436413,Wyatt,Trenton,08/21/2003,211000010262002,211000010262002,2014,01,53235A000,500,Science (Grade 5),08/14/2013,5-2,02,0,02,02,01,,,,,,100,05/29/2014, 
437868313,2436413,Wyatt,Trenton,08/21/2003,211000010262002,211000010262002,2014,01,58035A000,560,Physical Education (Grade 5),08/14/2013,5-2,02,0,02,02,01,,,,,,1,05/29/2014, 

我想简单地添加字母“S”到其他每一行的结尾。所以,上面有3条记录。 2014年5月29日之后,我想插入S.所以每一个记录看起来像:

437868313,2436413,Wyatt,Trenton,08/21/2003,211000010262002,211000010262002,2014,01,54435A000,510,Social Studies (Grade 5),08/14/2013,5-2,02,0,02,02,01,,,,,,100,05/29/2014,S 

我知道这会是那么简单哦转换为CSV并与Excel的工作,但我在传输回txt时获取各种格式问题。想用python对它进行破解。我试图用追加,从我的理解,写将覆盖我现有的文件:

myFile = open("myFile.txt", "a") 
    for line in myFile: 
     myFile.write('S') 

我不经常使用Python,我不知道如何我可以索引,以便它与2号线启动,并在逗号后添加最后一行,就像我上面提到的那样。

+1

在看看['file.readlines()'](https://docs.python.org/3.3/tutorial/inputoutput.html) 。 – Celeo 2014-09-18 22:08:35

+0

我知道这个问题是关于python的,但我不能不提,这是一个非常简单的'sed -i's/$/S /''在带* sed *的系统上。 – 2014-09-18 22:24:05

+0

“隔行”与“每条记录”有所不同 – shaktimaan 2014-09-18 22:24:29

回答

7

您需要逐行读取文件,然后再一行一行地输出。这是比使用CSV甚至电子表格处理软件,这真的让我害怕更简单。

with open('input.txt', 'r') as istr: 
    with open('output.txt', 'w') as ostr: 
     for i, line in enumerate(istr): 
      # Get rid of the trailing newline (if any). 
      line = line.rstrip('\n') 
      if i % 2 == 0: 
       line += 'S' 
      print(line, file=ostr) 

如果你还在使用Python 2,使用

ostr.write(line + '\n') 

,而不是print

更新:如果要追加到(而不是每隔)线路,只需使用:

with open('input.txt', 'r') as istr: 
    with open('output.txt', 'w') as ostr: 
     for line in istr: 
      line = line.rstrip('\n') + 'S' 
      print(line, file=ostr) 
+0

这就是它--- rstrip是关键成分......感谢您的帮助,@ b10n – Joe 2014-09-18 22:50:21

3

打开读取和写入文件,并列举输入文件。使用mod 2来平行偶数行。将s追加到偶数行并写入输出文件。

with open('myfile.txt', 'rb') as infile, with open('outfile.txt', 'wb') as outfile: 
    for lineno, line in enumerate(infile): 
     if lineno % 2 == 0: 
      line = line + 'S' 
     outfile.write(line) 

OP根据他的编辑需要每个记录,因此不需要测试偶数行。

import os 

with open('myfile.txt', 'rb') as infile, with open('outfile.txt', 'wb') as outfile: 
    for line in infile: 
     line = line.replace(os.linesep, 'S' + os.linesep) 
     outfile.write(line) 
+0

我喜欢这种方法 - 出于某种原因,当我运行脚本时,虽然它会生成输出文件但不会附加'S' - 基本上创建了我的原始文件的副本 - 是Python 2还是3? (我都试过)。代码逻辑看起来是正确的。 – Joe 2014-09-18 22:25:34

+0

我在追加'S'后忘记重新分配行,但自从编辑了我的帖子。再试一次。 'line = line +'S''是我更新的那一行。 – b10n 2014-09-18 22:26:39

+0

我不知道为什么,但它只是将'S'添加到文件的最后...不添加到任何行..我猜测这意味着它正在阅读文件作为一个巨大的线 - 不知道为什么它会这样做,他们肯定分成行(记录)。 – Joe 2014-09-18 22:44:15

0

最简单的方法是将文件作为一个块打开,并用逗号和换行符替换逗号和换行符。

open("data.txt").read().replace(',\n','S,\n').write() 
0

试试这个:

filename = "file.txt" 
file = open(filename, "r") 
for line in file: 
    print line.replace("\n","S\n") 
相关问题