Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自动读取多个文件,无需手动命名文件_Python_Python 2.7 - Fatal编程技术网

Python 自动读取多个文件,无需手动命名文件

Python 自动读取多个文件,无需手动命名文件,python,python-2.7,Python,Python 2.7,我有一个目录包含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 l

我有一个目录包含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()
导入全局
从itertools导入islice
导入行缓存
行数=1891427
每行位数=32
总位翻转=0
num_bit_diff_flip_zero=0
num\u bit\u diff\u flip\u one=0
folder=“files/”
路径='*.rbd'
路径=文件夹+路径
文件=已排序(glob.glob(路径))
original=open('files/mull original readback.rbd','r')
#source1=打开(文件1,“r”)
对于文件中的文件名:
德鲁线=101
将open(filename,'r')作为f:
i=1

虽然i您可以使用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()
供进一步参考:



问题在于,当您开始与
中的下一个文件进行比较时,您不会返回到
原始文件的开头,因为文件名在文件中:
循环。最简单的解决方案是:

original.seek(0)
在循环的开始

您还可以在循环之前将整个文件读入列表一次,并使用该列表代替重复读取文件

如果你只想处理部分文件,你可以把文件读入一个列表,然后用一个列表切片得到你想要的行

您也不应该在循环中每次都将
num\u bit\u diff\u flip\u zero
num\u bit\u diff\u flip\u 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

打印文件
显示什么?它显示目录中的所有文件及其名称…“它不工作”。它做错了什么?它给了我以下的错误。这太奇怪了,如果我给一个文件,它工作没有索引错误,但当给所有文件,它给索引错误。。回溯(最后一次调用):文件“random ones zeros.py”,第69行,if((lineoriginal[k]==line1[k]):索引器:字符串索引超出范围
回溯(最后一次调用):文件“random ones zeros.py”,第69行,if((lineoriginal[k]==line1[k])):索引器错误:字符串索引超出范围
为什么这比使用
glob.glob()
只列出他想要的文件要好?事实并非如此,老实说,我不知道glob.glob(),只是想给他一个我知道在我的机器上有效的快速解决方案,而不是一个高效的解决方案。他的问题显然是循环中的代码,没有得到文件名。你没有看到我的评论吗?当他开始与循环中的下一个文件进行比较时,他没有倒回原始文件。我的错,你是对的。我认为他的问题与他在问题中的主张有关,所以我没有深入挖掘就解决了这个问题。