0

次のような構造の.txtファイルがあります。

name
parameter 1
parameter 2
parameter 3
\n
name2
p1
p2
p3
\n
(...)

関数の引数として名前を取得するブロック(名前、パラメーター、\ n)をファイルから削除する関数を作成する方法がわかりません。

4

3 に答える 3

0

ファイルから削除するようなものはありません。ファイルの読み取りと書き込みのみを行うことができます。ただし、Python のリストから項目を削除したり、反復で項目を省略したりできます。

In [1]: def exclude(f, name):
   ...:     with open(f) as fo:
   ...:         found = False
   ...:         for line in fo:
   ...:             if line.strip() == name:
   ...:                 found = True
   ...:                 continue
   ...:             if found and not line.strip():
   ...:                 found = False
   ...:             if not found:
   ...:                 yield line
   ...: 

In [2]: with open('/tmp/new.txt', 'w') as new:
   ...:     new.writelines(exclude('/tmp/text.txt', 'name'))
   ...: 

この例では、 で始まるブロックなしで新しいファイルを書き込みます"name"。ブロックが空白行で区切られていることを前提としています。

于 2013-02-25T10:51:59.863 に答える
0

多分あなたはreadlineを使うことができます: tutorialspointのreadline()または これはreadlineに関するpythonドキュメントからのものです

  1. ソースファイルからすべての行を読み取ります。
  2. 行が関数パラメーター (名前など) で構成されている場合は、続行します (この行を読まずに、次の行にジャンプします)。
  3. 次に、フィルタリングされたすべての行を追加して、新しいファイルを作成します。
于 2013-02-25T10:53:02.050 に答える
0
def rmblock(path, block):                           
    lines = open(path).readlines()                  
    blockstart = lines.index(block + "\n")          
    blockend = lines.index(r"\n" + "\n", blockstart)
    del(lines[blockstart:blockend+1])               
    open(path, 'w+').writelines(lines)              
于 2013-02-25T11:22:41.950 に答える