问题描述
我每天从一个文件夹中处理几个 csv 文件,但是对于这个问题,我只是使用了 3 个 csv 的样本。我的输出是读取每个 csv 并从每个 csv 中提取单词“未知”的计数(如果存在)并获取相关 csv 的名称。我有一个脚本可以做到这一点,但除此之外,我还想反其道而行之。如果在任何 csv 文件中都没有找到“未知”(单词),我想要一个打印语句,说“所有文件都准备好了!”。我正在使用 Python 3.6。这是我所拥有的,以及脚本中不起作用的内容。澄清一下,“未知”是在第 9 列的 csv 文档中手动输入的单词。
示例文件是:
a_csv.csv、b_csv.csv、c_csv.csv
import glob
target_dir = r'C:\\data\\...'
for file in glob.glob('*.csv'):
with open(file) as f:
content = f.read()
# Get the count of each "UnkNown" from each file
count = content.count('UnkNown')
# Print file name with count of "UnkNown" and omitting the .csv from name
if count != 0:
print('\n,file[:-4] + ":" + str(count))
# HERE'S what does not work how I want
elif count == 0:
print('\nAll files are ready to go!")
所有文件都准备好了!
b_csv:5
所有文件都准备好了!
脚本打印“所有文件都准备好了!”对于每个通过 count == 0 测试的文件。我得到了这个过程,但是如果文件中根本没有“未知”,我如何调整它以只为所有文件打印一次语句?
如果在任何文件中未检测到“未知”,则为所需的输出,仅打印一次。
所有文件都准备好了!
非常感谢任何解决此问题的帮助/建议。
解决方法
最简单的方法可能是跟踪 Unkown
的总数。
由于您只想打印一次,因此应避免在 for 循环中打印。
正如您已经注意到的那样,这将导致多个输出。
import glob
target_dir = r'C:\\data\\...'
total_count = 0
for file in glob.glob('*.csv'):
with open(file) as f:
content = f.read()
# Get the count of each "Unknown" from each file
count = content.count('Unknown')
total_count += count
# Print file name with count of "Unknown" and omitting the .csv from name
if count != 0:
print('\n,' + file[:-4] + ':' + str(count))
if total_count == 0:
print('\nAll files are ready to go!')