Efficient way to delete a line from a text file
The most straight forward way of doing this is probably the best, write the entire file out to a new file, writing all lines except the one(s) you don't want.
Alternatively, open the file for random access.
Read to the point where you want to "delete" the line.
Skip past the line to delete, and read that number of bytes (including CR + LF - if necessary), write that number of bytes over the deleted line, advance both locations by that count of bytes and repeat until end of file.
Hope this helps.
EDIT - Now that I can see your code
if (!_deletedLines.Contains(counter))
{
writer.WriteLine(reader.ReadLine());
}
Will not work, if its the line you don't want, you still want to read it, just not write it. The above code will neither read it or write it. The new file will be exactly the same as the old.
You want something like
string line = reader.ReadLine();
if (!_deletedLines.Contains(counter))
{
writer.WriteLine(line);
}
Delete or clear a line from a text file
You can open your file in read-write mode and delete the lines that match a condition.
with open(file_path, "r+") as fp:
lines = fp.readlines()
fp.seek(0)
for line in lines:
if "boop" not in line:
fp.write(line)
fp.truncate()
The seek
resets the file pointer.
Reference: using Python for deleting a specific line in a file
How to delete a specific line in a file?
First, open the file and get all your lines from the file. Then reopen the file in write mode and write your lines back, except for the line you want to delete:
with open("yourfile.txt", "r") as f:
lines = f.readlines()
with open("yourfile.txt", "w") as f:
for line in lines:
if line.strip("\n") != "nickname_to_delete":
f.write(line)
You need to strip("\n")
the newline character in the comparison because if your file doesn't end with a newline character the very last line
won't either.
Fastest Way to Delete a Line from Large File in Python
You can have two file objects for the same file at the same time (one for reading, one for writing):
def removeLine(filename, lineno):
fro = open(filename, "rb")
current_line = 0
while current_line < lineno:
fro.readline()
current_line += 1
seekpoint = fro.tell()
frw = open(filename, "r+b")
frw.seek(seekpoint, 0)
# read the line we want to discard
fro.readline()
# now move the rest of the lines in the file
# one line back
chars = fro.readline()
while chars:
frw.writelines(chars)
chars = fro.readline()
fro.close()
frw.truncate()
frw.close()
Delete specific line from a text file?
If the line you want to delete is based on the content of the line:
string line = null;
string line_to_delete = "the line i want to delete";
using (StreamReader reader = new StreamReader("C:\\input")) {
using (StreamWriter writer = new StreamWriter("C:\\output")) {
while ((line = reader.ReadLine()) != null) {
if (String.Compare(line, line_to_delete) == 0)
continue;
writer.WriteLine(line);
}
}
}
Or if it is based on line number:
string line = null;
int line_number = 0;
int line_to_delete = 12;
using (StreamReader reader = new StreamReader("C:\\input")) {
using (StreamWriter writer = new StreamWriter("C:\\output")) {
while ((line = reader.ReadLine()) != null) {
line_number++;
if (line_number == line_to_delete)
continue;
writer.WriteLine(line);
}
}
}
How to delete from a text file, all lines that contain a specific string?
To remove the line and print the output to standard out:
sed '/pattern to match/d' ./infile
To directly modify the file – does not work with BSD sed:
sed -i '/pattern to match/d' ./infile
Same, but for BSD sed (Mac OS X and FreeBSD) – does not work with GNU sed:
sed -i '' '/pattern to match/d' ./infile
To directly modify the file (and create a backup) – works with BSD and GNU sed:
sed -i.bak '/pattern to match/d' ./infile
Python program to delete a specific line in a text file
Your problem is that lines[5]
will always be equal to line6
. You never modified the sixth line in lines
, so line6
and lines[5]
are still equal. Thus, the condition lines[5] != line6
will always fail.
If you want to always remove the sixth line from your file, you can use enumerate
. For example:
with open("file.txt", "r") as infile:
lines = infile.readlines()
with open("file.txt", "w") as outfile:
for pos, line in enumerate(lines):
if pos != 5:
outfile.write(line)
Related Topics
Learning Single Responsibility Principle with C#
Securing a Password in Source Code
How to Create a C# App That Decides Itself Whether to Show as a Console or Windowed App
Using Webclient in C# How to Get the Url of a Site After Being Redirected
ASP.NET Core Jwt Mapping Role Claims to Claimsidentity
Are Protected Members/Fields Really That Bad
Control Another Application Using C#
C# Speech Recognition - Is This What the User Said
Azure Shared Access Signature - Signature Did Not Match
What's the Role of Gethashcode in the Iequalitycomparer<T> in .Net
How to Hide Wpf Datagrid Columns Depending on a Property
Merge Multiple Word Documents into One Open Xml
Use Task.Run() in Synchronous Method to Avoid Deadlock Waiting on Async Method
Random Errors Using Wait for Element Clickable Method in Selenium