簡體   English   中英

如何在線將char寫入文件

[英]How to write char on line into file

我有一個大文本文件,

zhang
zhipeng
peng

我想讓N行之前或左行將str “-”寫入文本文件。

zhang
--zhipeng
peng

我不想將所有文件讀到內存,因為文件太大。 有點類似標記文件的某些行。


回答


 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>/opt/work/users/zhanghzipeng/baidu_baike/baike/utils/text_helper.py.html</title> <meta name="Generator" content="Vim/7.2"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body bgcolor="#000000" text="#ffffff"><font face="monospace"> <font color="#ffff00">&nbsp;1 </font><font color="#00ffff"># -*- coding:utf-8 -*-</font><br> <font color="#ffff00">&nbsp;2 </font><br> <font color="#ffff00">&nbsp;3 </font><br> <font color="#ffff00">&nbsp;4 </font><font color="#00ffff"># @version: 1.0</font><br> <font color="#ffff00">&nbsp;5 </font><font color="#00ffff"># @author: Zhipeng Zhang</font><br> <font color="#ffff00">&nbsp;6 </font><font color="#00ffff"># @date: '2015/5/28'</font><br> <font color="#ffff00">&nbsp;7 </font><font color="#ff40ff">import</font>&nbsp;os<br> <font color="#ffff00">&nbsp;8 </font><br> <font color="#ffff00">&nbsp;9 </font><font color="#ff40ff">import</font>&nbsp;fileinput<br> <font color="#ffff00">10 </font><br> <font color="#ffff00">11 </font><br> <font color="#ffff00">12 </font><font color="#ffff00">def</font>&nbsp;<font color="#00ffff">rewrite_line</font>(filename, lineno, text, left=True, right=False):<br> <font color="#ffff00">13 </font>&nbsp;&nbsp;&nbsp;&nbsp;f = fileinput.input(filename, inplace=1)<br> <font color="#ffff00">14 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">for</font>&nbsp;line <font color="#ffff00">in</font>&nbsp;f:<br> <font color="#ffff00">15 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_text = line.replace(&quot;<font color="#ff40ff">\\r\\n</font>&quot;, &quot;&quot;).replace(&quot;<font color="#ff40ff">\\n</font>&quot;, &quot;&quot;)<br> <font color="#ffff00">16 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;f.lineno() == lineno:<br> <font color="#ffff00">17 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;left:<br> <font color="#ffff00">18 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;text + line_text<br> <font color="#ffff00">19 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">elif</font>&nbsp;right:<br> <font color="#ffff00">20 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;line_text + text<br> <font color="#ffff00">21 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">else</font>:<br> <font color="#ffff00">22 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;text<br> <font color="#ffff00">23 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">else</font>:<br> <font color="#ffff00">24 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;line_text<br> <font color="#ffff00">25 </font>&nbsp;&nbsp;&nbsp;&nbsp;f.close()<br> <font color="#ffff00">26 </font><br> <font color="#ffff00">27 </font><font color="#ffff00">def</font>&nbsp;<font color="#00ffff">cat</font>(filename):<br> <font color="#ffff00">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">with</font>&nbsp;file(filename) <font color="#ff40ff">as</font>&nbsp;f:<br> <font color="#ffff00">29 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;f.read()<br> <font color="#ffff00">30 </font>&nbsp;&nbsp;&nbsp;&nbsp;os.remove(filename)<br> <font color="#ffff00">31 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">with</font>&nbsp;file(filename, &quot;<font color="#ffff00">w</font>&quot;)<font color="#ff40ff">as</font>&nbsp;f:<br> <font color="#ffff00">32 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(&quot;<font color="#ffff00">a</font><font color="#ff40ff">\\n</font><font color="#ffff00">b</font><font color="#ff40ff">\\n</font><font color="#ffff00">c</font>&quot;)<br> <font color="#ffff00">33 </font><br> <font color="#ffff00">34 </font><font color="#ffff00">def</font>&nbsp;<font color="#00ffff">test</font>():<br> <font color="#ffff00">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;filename = &quot;<font color="#ffff00">rewrite.test</font>&quot;<br> <font color="#ffff00">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">with</font>&nbsp;file(filename, &quot;<font color="#ffff00">w</font>&quot;)<font color="#ff40ff">as</font>&nbsp;f:<br> <font color="#ffff00">37 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(&quot;<font color="#ffff00">a</font><font color="#ff40ff">\\n</font><font color="#ffff00">b</font><font color="#ff40ff">\\n</font><font color="#ffff00">c</font>&quot;)<br> <font color="#ffff00">38 </font><br> <font color="#ffff00">39 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ffff00">new file:</font>&quot;&nbsp;+ filename<br> <font color="#ffff00">40 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ffff00">file content: a</font><font color="#ff40ff">\\n</font><font color="#ffff00">b</font><font color="#ff40ff">\\n</font><font color="#ffff00">c</font>&quot;<br> <font color="#ffff00">41 </font><br> <font color="#ffff00">42 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ffff00">--------start test---------</font>&quot;<br> <font color="#ffff00">43 </font><br> <font color="#ffff00">44 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;filename, &quot;<font color="#ffff00">line:</font>&quot;, 2, &quot;<font color="#ffff00">left add # --&gt; #b?</font>&quot;<br> <font color="#ffff00">45 </font>&nbsp;&nbsp;&nbsp;&nbsp;rewrite_line(filename, 2, &quot;<font color="#ffff00">#</font>&quot;, left=True)<br> <font color="#ffff00">46 </font>&nbsp;&nbsp;&nbsp;&nbsp;cat(filename)<br> <font color="#ffff00">47 </font><br> <font color="#ffff00">48 </font><br> <font color="#ffff00">49 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;filename, &quot;<font color="#ffff00">line:</font>&quot;, 2, &quot;<font color="#ffff00">right add #END --&gt; b#END?</font>&quot;<br> <font color="#ffff00">50 </font>&nbsp;&nbsp;&nbsp;&nbsp;rewrite_line(filename, 2, &quot;<font color="#ffff00">#END</font>&quot;, left=False, right=True)<br> <font color="#ffff00">51 </font>&nbsp;&nbsp;&nbsp;&nbsp;cat(filename)<br> <font color="#ffff00">52 </font><br> <font color="#ffff00">53 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;filename, &quot;<font color="#ffff00">line:</font>&quot;, 1, &quot;<font color="#ffff00">&nbsp;rewrite a --&gt; zhipeng?</font>&quot;<br> <font color="#ffff00">54 </font>&nbsp;&nbsp;&nbsp;&nbsp;rewrite_line(filename, 1, &quot;<font color="#ffff00">zhipeng</font>&quot;, left=False, right=False)<br> <font color="#ffff00">55 </font>&nbsp;&nbsp;&nbsp;&nbsp;cat(filename)<br> <font color="#ffff00">56 </font><br> <font color="#ffff00">57 </font>&nbsp;&nbsp;&nbsp;&nbsp;os.remove(filename)<br> <font color="#ffff00">58 </font><br> <font color="#ffff00">59 </font><br> <font color="#ffff00">60 </font><font color="#ffff00">if</font>&nbsp;__name__ == &quot;<font color="#ffff00">__main__</font>&quot;:<br> <font color="#ffff00">61 </font>&nbsp;&nbsp;&nbsp;&nbsp;test()<br> </font></body> </html> 

# implement
def mark(ifn, ofn, linenum):
    with open(ifn, "rt") as ifile:
        with open(ofn, "wt") as ofile:
            n = 0
            for line in ifile.readlines():
                n = n + 1
                if n == linenum:
                    ofile.write("---")
                ofile.write(line)

# execute
mark("a.txt", "b.txt", 4)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM