これを行う方法はありますか?ラインで、 Pythonでファイルの途中に行を挿入しますか?
、「チャーリー」
- アルフレッド:私はこのように書きます名前のリストだファイルを持っていると言いますx(この場合は3)、自動的に他のすべてを1行下に送りますか?私はこのような他の質問を見たことがありますが、彼らは役に立つ答えを得ていませんでした。それはできればメソッドかループのどちらかで行うことができますか?
これを行う方法はありますか?ラインで、 Pythonでファイルの途中に行を挿入しますか?
、「チャーリー」
これはトリックを行う方法です。
f = open("path_to_file", "r")
contents = f.readlines()
f.close()
contents.insert(index, value)
f = open("path_to_file", "w")
contents = "".join(contents)
f.write(contents)
f.close()
「インデックス」と「値」の行は、あなただけのリストにデータを読み、あなたが望む新しいレコードを挿入することができます0
file.readlines()
かfile.read().split('\n')
list.insert()
を使用して新しいリスト要素を挿入します。'file.read.split( '\ split( '\ n') ' – Harry
から始めて、お好みのラインと価値あります。
names = []
with open('names.txt', 'r+') as fd:
for line in fd:
names.append(line.split(' ')[-1].strip())
names.insert(2, "Charlie") # element 2 will be 3. in your list
fd.seek(0)
fd.truncate()
for i in xrange(len(names)):
fd.write("%d. %s\n" %(i + 1, names[i]))
あなたはとても一つの可能な解釈は、あなたが出力としてこれをしたいということで、出力がどのように見えるか、私たちは表示されません。
(チャーリーを挿入してから1後続のすべての行に)ここに1つの可能なソリューションです:。
def insert_line(input_stream, pos, new_name, output_stream):
inserted = False
for line in input_stream:
number, name = parse_line(line)
if number == pos:
print >> output_stream, format_line(number, new_name)
inserted = True
print >> output_stream, format_line(number if not inserted else (number + 1), name)
def parse_line(line):
number_str, name = line.strip().split()
return (get_number(number_str), name)
def get_number(number_str):
return int(number_str.split('.')[0])
def format_line(number, name):
return add_dot(number) + ' ' + name
def add_dot(number):
return str(number) + '.'
input_stream = open('input.txt', 'r')
output_stream = open('output.txt', 'w')
insert_line(input_stream, 3, 'Charlie', output_stream)
input_stream.close()
output_stream.close()
あなたは、サブストリングのためのファイルを検索し、次の行に新しいテキストを追加したい場合は、それを行うには、エレガントな方法の一つは次のとおりです。
import fileinput
for line in fileinput.FileInput(file_path,inplace=1):
if "TEXT_TO_SEARCH" in line:
line=line.replace(line,line+"NEW_TEXT")
print line,
python3では 'print(line、end = '')'は行間に改行を挿入しないようにするのに便利です。 –
私はこの問題を解決する上で有用であることが分かっ技術の組み合わせがあります:私たちの特定のアプリケーションで
with open(file, 'r+') as fd:
contents = fd.readlines()
contents.insert(index, new_string) # new_string should end in a newline
fd.seek(0) # readlines consumes the iterator, so we need to start over
fd.writelines(contents) # No need to truncate as we are increasing filesize
は、我々は特定の文字列の後にそれを追加したい:
with open(file, 'r+') as fd:
contents = fd.readlines()
if match_string in contents[-1]: # Handle last line to prevent IndexError
contents.append(insert_string)
else:
for index, line in enumerate(contents):
if match_string in line and insert_string not in contents[index + 1]:
contents.insert(index + 1, insert_string)
break
fd.seek(0)
fd.writelines(contents)
あなたはそれだけではなく、最初の試合のすべてのインスタンスの後に文字列を挿入したい場合は、else:
を削除(および適切にインデント解除)とbreak
。
and insert_string not in contents[index + 1]:
は、match_string
の後に複数のコピーを追加することができないため、繰り返し実行することもできます。
私は、いくつかの基本的な研究でこれに対する解決策を見つけることはできません。あなたはそれをしてもよろしいですか? –
@AbhranilDas私はすぐにこの答えを見つけたtkbxの良い言い回しのおかげで! – dmeu
related:[テキストファイルの中身を読んでいるときに、テキストファイルの途中に書き込むにはどうすればいいですか?](0120-18753) – jfs