Ce code renvoie le message d'erreur suivant:
avec open (infile, mode = 'r', buffering = -1) comme in_f, open (outfile, mode = 'w', buffering = -1) comme out_f: TypeError: contraindre à Unicode: chaîne requise ou tampon, fichier trouvé
# Opens each file to read/modify
infile=open('110331_HS1A_1_rtTA.result','r')
outfile=open('2.txt','w')
import re
with open (infile, mode='r', buffering=-1) as in_f, open (outfile, mode='w', buffering=-1) as out_f:
f = (i for i in in_f if i.rstrip())
for line in f:
_, k = line.split('\t',1)
x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k)
if not x:
continue
out_f.write(' '.join(x[0]) + '\n')
S'il vous plaît, aidez-moi.
Vous essayez d'ouvrir chaque fichier deux fois! D'abord vous faites:
infile=open('110331_HS1A_1_rtTA.result','r')
et ensuite vous passez infile
(qui est un objet fichier) à la fonction open
:
with open (infile, mode='r', buffering=-1)
open
s'attend bien sûr à ce que son premier argument soit un nom de fichier, pas un fichier ouvert!
Ouvrez le fichier une fois seulement et ça devrait aller.
Pour le cas moins spécifique (pas seulement le code de la question), car il s'agit d'un des premiers résultats de Google pour ce message d'erreur générique. Cette erreur se produit également lors de l'exécution de certaines commandes os avec l'argument None.
Par exemple:
os.path.exists(arg)
os.stat(arg)
Lève cette exception lorsque arg est None.
Vous essayez de transmettre des objets de fichier en tant que noms de fichier. Essayez d'utiliser
infile = '110331_HS1A_1_rtTA.result'
outfile = '2.txt'
en haut de votre code.
(Non seulement l'utilisation doublée de open()
pose-t-elle le problème de la tentative d'ouverture du fichier, mais cela signifie également que infile
et outfile
ne sont jamais fermés au cours de l'exécution, bien qu'ils se ferment probablement une fois le programme terminé.)
Voici le meilleur moyen que j'ai trouvé pour Python 2:
def inplace_change(file,old,new):
fin = open(file, "rt")
data = fin.read()
data = data.replace(old, new)
fin.close()
fin = open(file, "wt")
fin.write(data)
fin.close()
Un exemple:
inplace_change('/var/www/html/info.txt','youtub','youtube')