加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如果行包含CSV文件中的字符串,则删除该行

发布时间:2020-12-20 11:54:53 所属栏目:Python 来源:网络整理
导读:我在删除包含一列中的字符串的文本文件中的行时遇到问题.到目前为止,我的代码无法删除该行,但它能够读取文本文件并将其作为CSV文件保存到单独的列中.但这些行不会被删除. 这就是该列中的值如下所示: Ship To or Bill To------------------3000000092-BILL_T
我在删除包含一列中的字符串的文本文件中的行时遇到问题.到目前为止,我的代码无法删除该行,但它能够读取文本文件并将其作为CSV文件保存到单独的列中.但这些行不会被删除.

这就是该列中的值如下所示:

Ship To or Bill To
------------------
3000000092-BILL_TO
3000000092-SHIP_TO
3000004000_SHIP_TO-INAC-EIM

还有20多列和50,000k多行.所以基本上我试图删除包含字符串’INAC’或’EIM’的所有行.

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)

解决方法

这里的问题是csv.reader对象将文件的行作为单个列值的列表返回,因此“in”测试检查该列表中的任何单个值是否等于remove_word.

快速修复就是尝试

if not any(remove_word in element
                      for element in line
                      for remove_word in remove_words):

因为如果行中的任何字段包含任何remove_words,则为true.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读