Deleting a row if it contains a string in a CSV file
<p>I'm having trouble deleting rows in text file that contains a string in one column. My code so far is not able to delete the row, but it's able to read the text file and save it as a CSV file into separate columns. But the rows are not getting deleted.</p>

<p>This is what the values in that column looks like:</p>

<pre class="lang-none prettyprint-override"><code>Ship To or Bill To
------------------
3000000092-BILL_TO
3000000092-SHIP_TO
3000004000_SHIP_TO-INAC-EIM
</code></pre>

<p>And there are 20 more columns and 50,000k plus rows. So essentially I'm trying to delete <strong>all</strong> the rows that contain strings <code>'INAC'</code> or <code>'EIM'</code>.</p>

<pre><code>import csv

my_file_name = "NVG.txt"
cleaned_file = "cleanNVG.csv"
remove_words = ['INAC','EIM']

with open(my_file_name, 'r', newline='') as infile, \
     open(cleaned_file, 'w',newline='') as outfile:
    writer = csv.writer(outfile)
    for line in csv.reader(infile, delimiter='|'):
        if not any(remove_word in line for remove_word in remove_words):
            writer.writerow(line)
</code></pre>

<p>Each line output by the csv reader is a list of strings, not a string, so your list comprehension is checking if 'INAC' or 'EIM' is one of the members of the list, i.e:</p>

<pre><code>'INAC' in ['3000004000_SHIP_TO-INAC-EIM', ...]
</code></pre>

<p>Which is always false, since 'in' looks for exact matches when called on a list. If you want to check whether the string is present anywhere in the line, you don't need a csv reader, and can instead use a normal open():</p>

<pre><code>import csv

my_file_name = "NVG.txt"
cleaned_file = "cleanNVG.csv"
remove_words = ['INAC','EIM']

with open(my_file_name, 'r', newline='') as infile, open(cleaned_file, 'w',newline='') as outfile:
    writer = csv.writer(outfile)
    for line in infile:
        if not any(remove_word in line for remove_word in remove_words):
            writer.writerow(line)
</code></pre>

python python-3.x