2013-08-28 3 views
0

Я пытаюсь преобразовать файл в другой формат с помощью этого кода на Python, который требует трех аргументов входного файла, выходного файла и процентного значения. Я вызываю функцию python в сценарии оболочки, и он работает отлично в первый раз, но не работает во второй раз. Ошибка: «IOError: [Errno 2] Нет такого файла или каталога:« ux_source_2850.txt ». Но я уверен, что этот файл находится в этом каталоге. Может кто-то, пожалуйста, помогите мне. Кроме того, мне интересно, есть ли другой способ вызвать функцию python, например, скомпилированную функцию c, поэтому я могу выполнить функцию вместе с несколькими аргументами.IOError: [Errno 2] Нет такого файла или каталога: 'ux_source_2850.txt

#!/usr/bin/env python 
def convertfile(file1,file2,percentage): 
    with open(file1, "r+") as infile, open(file2, "w+") as outfile: 
    outfile.write('lon lat Ve Vn Se Sn Cen Site Ref\n') 
    for line in infile.readlines(): 
     line = line.strip() 
     new_line=line + " "+percentage+" "+percentage+" "+'0.05 stat(0,0) test1'+'\n' 
     outfile.write(new_line) 
file1=raw_input()                
file2=raw_input()                
percentage=raw_input()               
convertfile(file1,file2,percentage) 

#!/bin/bash 
infile1=ux_source_$j.txt              
outfile1=ux_$j.txt                
percentage1=`sort biggest_z_amp | tail -1 | awk '{print $1*2e4}'`    
../convertfile.py<<!               
$infile1                  
$outfile1                  
$percentage1                 
!                    
infile2=uy_source_$j.txt              
outfile2=uy_$j.txt                
../convertfile.py<<!               
$infile2                  
$outfile2                  
$percentage1                 
!    
+1

«Но я уверен, что этот файл находится в директории» Вы действительно уверены? Я думаю, что единственная причина, по которой это может закончиться, - это то, что файла действительно нет. – CDspace

ответ

1

Возможно, проблема заключается в скрипте оболочки, а не в скрипте Python. Убедитесь, что в строках, которые вы указываете в качестве входных данных для скрипта Python, нет конечных пробелов.

еще лучше, используйте:

file1 = raw_input().strip() 
file2 = raw_input().strip() 
+0

Большое вам спасибо. Оно работает. Могу ли я спросить, что здесь делает «полоска»? И я не могу найти что-то не так в моем сценарии оболочки, который может вызвать это. – user2197705

+0

В сценарии оболочки строки, начинающиеся с '$ infile', имеют конечные пробелы. Когда скрипт Python читает строку, он считает, что имя входного файла «ux_source_2850.txt» (с рядом пробелов в конце), а не только «ux_source_2850.txt». Метод 'strip' удаляет белые символы с начала и конца строки. – nickie

Смежные вопросы