我是一个相当新的编码,但我试图写一个代码,读取一个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)
非常需要任何帮助或建议!
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")
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)