我不知道这对我们中间的技术人员来说是否应该是显而易见的,但是有一种特定的方法可以从文本文件中读取一行,然后编辑它并将其插回到文件中原来的位置?我查看了网站,但我找到的所有解决方案似乎都适用于python 2.7。
以下是我正在寻找的一个例子:
with open example.txt as file:
for line in file:
if myline in file:
file.edit("foo","fah")
答案 0 :(得分:1)
在95%的情况下,替换文件中的数据(例如文本)通常意味着
因此,一个简单的代码将是:
import os
with open(in_path, 'r') as fin:
with open(temp_path, 'w') as fout:
for line in fin:
line.replace('foo', 'fah')
fout.write(line)
os.rename(temp_path, in_path)
为什么不进行就地替换?好吧,文件是固定的字节序列,增长它的唯一方法是附加到文件末尾。现在,如果要替换相同长度的数据 - 没有问题。但是,如果原始序列和新序列的长度不同,则会出现问题:新序列将覆盖以下字符。例如。
original: abc hello abc world
replace abc -> 12345
result: 12345ello 12345orld
答案 1 :(得分:0)
您可以使用cmake_minimum_required(VERSION 3.0.2)
project(TestGamma)
set(GAMMATEST_VERSION_MAJOR 1)
set(GAMMATEST_VERSION_MINOR 0)
set(CMPH_INCLUDE_DIR /usr/local/lib)
include(FindPkgConfig)
configure_file(
"${PROJECT_SOURCE_DIR}/TestGammaConfig.h.in"
"${PROJECT_BINARY_DIR}/TestGammaConfig.h"
)
include_directories(${PROJECT_BINARY_DIR})
set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(testgamma ${SOURCE_FILES})
pkg_check_modules(CMPH REQUIRED cmph)
include_directories(${CMPH_INDLUDE_DIR})
link_directories(${CMPH_INCLUDE_DIR})
target_link_libraries(testgamma cmph ${CMPH_INCLUDE_DIR})
并fileinput
来完成此操作。您仍然无法进行单行编辑,您可以有条件地更改所需的行,并将其他所有内容保留原样。
简而言之,文件如下:
inplace
你可以这样做:
$ head example.txt
pass
pass
foo
pass
结果:
import fileinput
with fileinput.input('example.txt', inplace=True) as f:
for line in f:
print('fah' if 'foo' in line else line.strip())