Reputation: 449
In my python script, I write specific columns from a text_file to a new_text_file separated by ,
because the new_text_file will later become a csv_file. There are white space lines left over in the new_text_file because of lines I skipped writing over that need to be removed from the file.
I can't use .strip()
or .rstrip()
because I get the error: AttributeError: '_io.TextIOWrapper' object has no attribute 'strip'
.
I can't use ip_file.write("".join(line for line in ip_file if not line.isspace()))
because I get the error: UnsupportedOperation: not readable
.
I also tried importing sys
and re
, and have tried every other answer found on this site, but it still returns errors.
My code is:
for ip in open("list.txt"):
with open(ip.strip()+".txt", "a") as ip_file:
for line in open("data.txt"):
new_line = line.split(" ")
if "blocked" in new_line:
if "src="+ip.strip() in new_line:
#write columns to new text file
ip_file.write(", " + new_line[11])
ip_file.write(", " + new_line[12])
try:
ip_file.write(", " + new_line[14] + "\n")
except IndexError:
pass
The resulting ip_file looks like:
, dst=00.000.00.000, proto=TCP, dpt=80
, dst=00.000.00.000, proto=TCP, dpt=80
, dst=00.000.00.000, proto=TCP, dpt=80
, dst=00.000.00.000, proto=TCP, dpt=80
, dst=00.000.00.000, proto=TCP, dpt=80
I was coding under the last line of the above script, within the loops. The new_text_file
is ip_file
in my script and everything must be in Python.
Question: Is there another way to remove the blank lines in ip_file
? OR prevent them from ever being written?
Upvotes: 2
Views: 7092
Reputation: 14088
I think I understand what you're saying. Try making these changes:
for line in open("data.txt"):
new_line = line.rstrip().split()
^^^^^^^^^
if "blocked" in new_line:
if "src="+ip.strip() in new_line:
#write columns to new text file
ip_file.write(", " + new_line[11])
ip_file.write(", " + new_line[12])
try:
ip_file.write(", " + new_line[14])
# ^^^^
except IndexError:
pass
ip_file.write("\n")
#
It seems that the problem was that when new_line[14]
existed, it already contained a newline, so you were appending two newlines. The above code rstrips any newline off line before you split it, then appends a single newline no matter what at the end of the inner for loop.
Upvotes: 1