搜索文本文件的特定行,但有一个烦人的转折
searching a specific line of a text file, but with an annoying twist
因此,我的 python 文件需要能够删除文本文件的行。简单吧?这个网站上有很多关于这个主题的已回答问题,不幸的是,如果两行在字符串 E.G 中具有相同系列的字符,则它们不包括在内:
datafile.txt:
LMNO:ABCD:UVWX
ABCD:EFGH:IJKL
BABC:DEFG:HIJK
如果我想删除第二行,我将不得不搜索它,我的系统工作方式意味着您只会知道冒号之前的第一部分。例如:
LMNO:
ABCD:
BABC:
所以,如果我想删除包含 ABCD 甚至 ABCD: 的行,它会 return 第 1 行。
这是我当前的代码:
import fileinput, sys
def searchFiles(searchPrompt):
with open("testfile.txt") as f:
for num, line in enumerate(f, 1):
if searchPrompt in line:
return(num)
def deleteLine(lineNumber):
for lineNumber, line in enumerate(fileinput.input('testfile.txt',
inplace=1)):
if lineNumber == 0:
continue
else:
sys.stdout.write(line)
searchPrompt = input("Enter username to delete: ")
searchPrompt = (searchPrompt+":")
print(searchPrompt)
lineNumber = searchFiles(searchPrompt)
deleteLine(lineNumber)
我想这就是你想要的:
import fileinput, sys
def removeFromFile(file, user):
pattern = user+":"
f = open(file, "r+")
lines = f.readlines()
f.seek(0)
for line in lines:
if not line.startswith(pattern):
f.write(line)
f.truncate()
f.close()
username = input("Enter username to delete: ")
removeFromFile("datafile.txt", username)
您可以在 python 中使用切片,分隔符为“:”
例如:
def searchFiles(searchPrompt):
with open("testfile.txt") as f:
for num, line in enumerate(f, 1):
if searchPrompt == line.split(":")[0]:
return(num)
def deleteLine(lineNumber):
for lineNumber, line in enumerate(fileinput.input('testfile.txt',
inplace=1)):
if lineNumber == 0:
continue
else:
sys.stdout.write(line)
searchPrompt = input("Enter username to delete: ")
searchPrompt = searchPrompt.split(":")[0]
print(searchPrompt)
lineNumber = searchFiles(searchPrompt)
deleteLine(lineNumber)
因此,我的 python 文件需要能够删除文本文件的行。简单吧?这个网站上有很多关于这个主题的已回答问题,不幸的是,如果两行在字符串 E.G 中具有相同系列的字符,则它们不包括在内: datafile.txt:
LMNO:ABCD:UVWX
ABCD:EFGH:IJKL
BABC:DEFG:HIJK
如果我想删除第二行,我将不得不搜索它,我的系统工作方式意味着您只会知道冒号之前的第一部分。例如:
LMNO:
ABCD:
BABC:
所以,如果我想删除包含 ABCD 甚至 ABCD: 的行,它会 return 第 1 行。
这是我当前的代码:
import fileinput, sys
def searchFiles(searchPrompt):
with open("testfile.txt") as f:
for num, line in enumerate(f, 1):
if searchPrompt in line:
return(num)
def deleteLine(lineNumber):
for lineNumber, line in enumerate(fileinput.input('testfile.txt',
inplace=1)):
if lineNumber == 0:
continue
else:
sys.stdout.write(line)
searchPrompt = input("Enter username to delete: ")
searchPrompt = (searchPrompt+":")
print(searchPrompt)
lineNumber = searchFiles(searchPrompt)
deleteLine(lineNumber)
我想这就是你想要的:
import fileinput, sys
def removeFromFile(file, user):
pattern = user+":"
f = open(file, "r+")
lines = f.readlines()
f.seek(0)
for line in lines:
if not line.startswith(pattern):
f.write(line)
f.truncate()
f.close()
username = input("Enter username to delete: ")
removeFromFile("datafile.txt", username)
您可以在 python 中使用切片,分隔符为“:”
例如:
def searchFiles(searchPrompt):
with open("testfile.txt") as f:
for num, line in enumerate(f, 1):
if searchPrompt == line.split(":")[0]:
return(num)
def deleteLine(lineNumber):
for lineNumber, line in enumerate(fileinput.input('testfile.txt',
inplace=1)):
if lineNumber == 0:
continue
else:
sys.stdout.write(line)
searchPrompt = input("Enter username to delete: ")
searchPrompt = searchPrompt.split(":")[0]
print(searchPrompt)
lineNumber = searchFiles(searchPrompt)
deleteLine(lineNumber)