【问题标题】:How to filter a csv files based on special characters?如何根据特殊字符过滤 csv 文件?
【发布时间】:2021-02-11 11:08:57
【问题描述】:

我有一个如下所示的文件:

#test data
10  x   x   x
A11 2   x   x
*12 2   x   x
LOK 3   x   x
**r1    1   1   2
+Y6 x   x   x
13  x   x   x
+12 3   x   x

我正在尝试编写一个代码,如果它包含以下任何字符,则它会在 file1.txt 中获取 row[0]

 1. Any numeric character (digit).
 2. Any character from the alphabet.
 3. An asterisk (*) or a plus (+) sign.

我的代码现在没有给出正确的输出,因为我不知道如何添加需求 2 和 3。

这是我的代码:

import csv
old_path = 'file_1.txt'

def filter_row(row):
    if len(row) > 1 and row[1].isdigit():
        condition_1 = row[0].isdigit()

        return condition_1

with open(old_path, 'r') as f1:
    reader_f1 = csv.reader(f1, delimiter='\t')

    for row in reader_f1:
        if filter_row(row):
            print(row)

这是我期望的输出:

   A11  2   x   x
    *12 2   x   x
    LOK 3   x   x
    **r1    1   1   2
    +12 3   x   x

【问题讨论】:

    标签: python csv for-loop filter


    【解决方案1】:

    假设您使用的是 Python3, 打开文件时始终指定编码,例如'utf-8' 和换行符='' CSV 方言也可以提供帮助,

    import csv
    
    
    def check_aphabet(data):
        for ch in data:
            if((ch >= 'a' and ch <= 'z') or (ch >= 'A' and ch <= 'Z')):
                return True
        return False
    def filter_row(row):
        data = row[0]
        if all([i.isdigit() for i in data]):
            return False
        elif check_aphabet(data) or all([i.isdigit() for i in data]):
            return True
        elif '*' in data or '+' in data:
            return True
        return  False
    
    with open('delete.csv', encoding='UTF-8', newline='') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        for row in csv_reader:
            if filter_row(row):
                print(row)
    

    【讨论】:

    • 仍然没有给我想要的输出
    • CSV 文件的分隔符是什么?
    • 我用逗号分隔值创建了 CSV 文件,0,x,x,x A11,2,x,x *12,2,x,x LOK,3,x,x **r1, 1,1,2 +Y6,x,x,x 13,x,x,x +12,3,x,x 以上代码在这个文件上运行良好。
    • 我有制表符分隔符,你只是打印行[0],这不是我要求的
    • @TangerCity 您现在可以查看吗?
    猜你喜欢
    • 2018-06-25
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多