Python在csv列中搜索字符串并在另一个csv文件中写入行。

问题描述 投票:0回答:1

我是一个相当新的编码,但我试图写一个代码,读取一个csv文件,检查用户输入的字符串是否在特定的列中,然后在一个单独的csv文件中写出字符串存在的行。问题是,当我运行这段代码时,它只打印出1行,而不是打印出多行有字符串的行。我也试过让它不区分大小写,但不知为何也不行。

我现在的代码是这样的。

import csv
shape = input("Type in a shape ")
color = input("Type in a color")
with open("directory.csv", "r") as f:
    csvreader = csv.reader(f, delimiter=",")
    for row in csvreader:
      if shape.lower() in row[7] and color.lower() in row[6] :
         with open("data.csv", "w") as file:
            writer = csv.writer(file, lineterminator = "\n")
            writer.writerow(row)

非常需要任何帮助或建议!

python string csv row case-insensitive
1个回答
0
投票

pandas在这里帮助你。使用下面的片段。

import pandas as pd
df = pd.read_csv("directory.csv")
df1 = df[df["column1"] == shape & df["column2"] == color]
df1.to_csv("found_data.csv")

0
投票

data.csv 每次打开时都会被截断。'w' 模式,所以它将只包含最终的匹配。 移动 open 语句到代码的开头就可以解决这个问题。

import csv
shape = input("Type in a shape ")
color = input("Type in a color")
with open("directory.csv", "r") as f, open("data.csv", "w") as file:
    csvreader = csv.reader(f, delimiter=",")
    for row in csvreader:
        if shape.lower() in row[7] and color.lower() in row[6] :
            writer = csv.writer(file, lineterminator = "\n")
            writer.writerow(row)

或者,也可以在 'a' (append)模式,那么文件中现有的行将被保留。

import csv
shape = input("Type in a shape ")
color = input("Type in a color")
with open("directory.csv", "r") as f:
    csvreader = csv.reader(f, delimiter=",")
    for row in csvreader:
      if shape.lower() in row[7] and color.lower() in row[6] :
         with open("data.csv", "a") as file:
            writer = csv.writer(file, lineterminator = "\n")
            writer.writerow(row)
© www.soinside.com 2019 - 2024. All rights reserved.