自动读取多个文件没有手动文件命名
我有一个目录包含50个文件我想逐一阅读它们并与其他文件比较 - 这是固定的。我正在使用glob.blob
。但它没有奏效。自动读取多个文件没有手动文件命名
这里我是如何读取所有文件的。相反,path = '*.rbd'
如果我给它的文件名如path = run-01.rbd
它的工作原理。
path = '*.rbd'
path = folder + path
files=sorted(glob.glob(path))
完整代码
import glob
from itertools import islice
import linecache
num_lines_nonbram = 1891427
bits_perline = 32
total_bit_flips = 0
num_bit_diff_flip_zero = 0
num_bit_diff_flip_ones = 0
folder = "files/"
path = '*.rbd'
path = folder + path
files=sorted(glob.glob(path))
original=open('files/mull-original-readback.rbd','r')
#source1 = open(file1, "r")
for filename in files:
del_lines = 101
with open(filename,'r') as f:
i=1
while i <= del_lines:
line1 = f.readline()
lineoriginal=original.readline()
i+=1
i=0
num_bit_diff_flip_zero = 0
num_bit_diff_flip_ones = 0
num_lines_diff =0
i=0
j=0
k=0
a_write2 = ""
while i < (num_lines_nonbram-del_lines):
line1 = f.readline()
lineoriginal = original.readline()
while k < bits_perline:
if ((lineoriginal[k] == line1[k])):
a_write2 += " "
else:
if (lineoriginal[k]=="0"):
#if ((line1[k]=="0" and line1[k]=="1")):
num_bit_diff_flip_zero += 1
if (lineoriginal[k]=="1"):
#if ((line1[k]=="0" and line1[k]=="1")):
num_bit_diff_flip_ones += 1
#if ((line1[k]==1 and line1[k]==0)):
#a_write_file2 = str(i+1) + " " + str(31-k) + "\n" + a_write_file2
#a_write2 += "^"
#num_bit_diff_flip_one += 1
# else:
# a_write2 += " "
k+=1
total_bit_flips=num_bit_diff_flip_zero+num_bit_diff_flip_ones
i+=1
k=0
i = 0
print files
print "Number of bits flip zero= %d" %num_bit_diff_flip_zero +"\n" +"Number of bits flip one= %d" %num_bit_diff_flip_ones +"\n" "Total bit flips = %d " %total_bit_flips
f.close()
original.close()
您可以使用os模块在一个目录列表第一的一切(包括文件和模块),然后使用一个Python生成器来过滤出的文件。然后,您可以使用第二个Python生成器来过滤具有特定扩展名的文件。有可能是做的更有效的方法,但这个工程:
import os
def main():
path = './' # The path to current directory
# Go through all items in the directory and filter out files
files = [file for file in os.listdir(path) if
os.path.isfile(os.path.join(path, file))]
# Go through all files and filter out files with .txt (for example)
specificExtensionFiles = [file for file in files if ".txt" in file]
# Now specificExtensionFiles is a generator for .txt files in current
# directory which you can use in a for loop
print (specificExtensionFiles)
if __name__ == '__main__':
main()
更多参考: How do I list all files of a directory?
为什么这比使用'glob.glob()'来列出他想要的文件要好? – Barmar
这不是,我真的不知道glob.glob(),并想给他一个快速的解决方案,我知道我的机器上工作,而不是一个有效的。 – Omnomnious
他的问题显然是循环中的代码,而不是获取文件名。 – Barmar
的问题是,你不打算回originalfile
每当开始您将开始与for filename in files:
循环中的下一个文件进行比较。最简单的解决方案是:
original.seek(0)
在该循环的开始。
您也可以在循环之前将整个文件读入列表中,并使用该文件而不是重复读取文件。
如果您只想处理部分文件,则可以将文件读入列表中,然后使用列表切片获取所需的行。
您也不应该设置num_bit_diff_flip_zero
和num_bit_diff_flip_one
到0
每次通过循环,因为这些应该是所有文件之间的总和。
with open('files/mull-original-readback.rbd','r') as original:
original_lines = list(original)[del_lines:num_lines_nonbram]
for filename in files:
with open(file, 'r') as f:
lines = list(f)[del_lines:num_lines_nonbram]
for lineoriginal, line1 in zip(original_lines, lines):
for k in range(bits_perline):
if lineoriginal[k] == line1[k]:
a_write2 += " "
elif lineoriginal[k] == "0"
num_bit_diff_flip_zero += 1
else:
num_bit_diff_flip_ones += 1
total_bit_flips = num_bit_diff_flip_zero + num_bit_diff_flip_ones
'print files'显示什么? – Barmar
它显示目录中的所有文件名称... – hassan
“它没有工作”。它做错了什么? – Barmar