gpt4 book ai didi

python - 如何检查文件夹中的文件是否与 .csv 文件中指定的文件名一致?

转载 作者:行者123 更新时间:2023-12-05 06:51:47 54 4
gpt4 key购买 nike

我正在尝试构建一种方法来检查我的 .csv 文件中的文件名是否与我的实际文件夹中的文件名匹配。如果它们不匹配,我想删除 .csv 文件中的整行。到目前为止,这是我尝试过的:

dir_path = Path('D:\audio_files')

csv_file_path = Path('D:\metadata.csv')

lines = list()
files = list()

for f in os.listdir(dir_path):
f = f.strip('.wav')
files.append(str(f))

with open(csv_file_path, 'r') as read_file:
reader = csv.reader(read_file)
for row in reader:
lines.append(row)
for field in row:
for f in files:
if field != f:
print("Line Removed.")
lines.remove(row)

但是,我不断收到此错误:

Traceback (most recent call last):
File "file_checker.py", line 26, in <module>
lines.remove(row)
ValueError: list.remove(x): x not in list

我应该修复什么才能使其正常工作?

编辑:

这是我的 .csv 文件的一个小样本。这非常简单。第一列包含不带扩展名的文件名,第二列包含文件名的标签。

<表类="s-表"><头>fname标签<正文>236421男性语音124818女性语音426906男性语音

等等。

我主要是尝试将 fname 列中的名称与我的文件夹(扩展名为 .wav)中的名称相匹配,如果这些名称不存在于文件夹,删除不存在的文件名行。

编辑#2:

在本地的帮助下,我设法解决了这个问题。这是最终产品:

dir_path = 'D:\audio'

csv_file_path = 'D:\original.csv'

#create a new file that contains the fnames on the cvs file that match the file names in my file folder
csv_new_file = open('D:\new.csv', 'w', newline="")

# create a writer variable that will allow me to write rows in my new csv file
csv_write = csv.writer(csv_new_file, delimiter=',', quotechar='"')

# "i" variable will allow me to write the headers from the original csv file
i = 0
with open(csv_file_path, 'r') as read_file:
reader = csv.reader(read_file, delimiter=',', quotechar='"')
for row in reader:
#If the row is the very first, the write it as is (headers)
if i == 0:
csv_write.writerow(row)
i += 1
continue
#Check if the file path for my audio files with .wav extension exists and the write the row of the original csv in my new csv
file_path = dir_path + '/' + row[0] + '.wav'
if os.path.exists(file_path):
csv_write.writerow(row)

#IMPORTANT to close files once finished!
csv_new_file.close()
read_file.close()

最佳答案

考虑这个 block :

for f in files:
if field != f:
lines.remove(row)

也就是说,如果 field 的值不等于 f 的值,则将其删除。如果 files 是一个文件列表,除非列表中的第一个元素与字段的值匹配,否则它将被删除,并且在该元素被删除后迭代将继续。

相反,我建议将文件设置为集合并检查集合中的成员

dir_path = Path('D:\audio_files')

csv_file_path = Path('D:\metadata.csv')

lines = list()
files = set()

for f in os.listdir(dir_path):
f = f.strip('.wav')
files.add(str(f))

with open(csv_file_path, 'r') as read_file:
reader = csv.reader(read_file)
for row in reader:
lines.append(row)
for field in row:
if field not in files:
lines.remove(row)
continue

我个人会将这些循环拆分并构建行列表,然后迭代删除元素的副本,但这可能只是个人喜好。

关于python - 如何检查文件夹中的文件是否与 .csv 文件中指定的文件名一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66072612/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com