tattyan3
@tattyan3 (tatsuji shimo)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

python.File読込

Q&A

Closed

解決したいこと

https://qiita.com/tattyan3/questions/69399226a30e3e6dadcd
またまた、ご迷惑をおかけします。
特定の条件でファイル読込が終わってしまう。
value = ['1','','3'] のとき['1']で終わってしまう。

発生している問題・エラー

Errorはありません。

該当するソースコード

import os
import sys
import re
# ファイル名
data_file_name = 'my_test.txt'
# ファイルが存在するか確認
new_f=bool(0)

test_bol=bool(1)#test=1
 
my_list_in = []

def fail_new_f():
    myx=1
    if os.path.exists(data_file_name):
    #fileがあれば読み込む
        global new_f
        global test_bol
        global my_list_in
      
        if  new_f == bool(0) and myx==1:
            print('in Line')
            with open(data_file_name, 'r') as f:
                line = f.readline() 
                print(line.rstrip("\n"),' 1st') #print? 1st print out
                line = re.sub(r'\n', '', line)
                while line:# and 'x04|$==True が欲しい
                    print('it test')
                    print(line.rstrip("\n")) 
                 #  line = line.rstrip("\n") 
                    line = re.sub(r'\n', '', line)               
                    my_list_in.append(line)
                    print(line,' inL')
                
                    line = f.readline()
                    line = re.sub(r'\n', '', line)                

        if new_f==bool(1):
            with open(data_file_name, 'w') as f:
                for item in my_list_in:
                    f.write(item + '\n')
            
        new_f = bool(1)
    else:
    #fileがなければ作成
        my_list_in = ['1', '2', '3', '4', '5']  
        with open(data_file_name, 'w') as f:
            for item in my_list_in:
                f.write(item + '\n')
        print('white end')       

if not os.path.exists(data_file_name):
    new_f = bool(0)
    fail_new_f() #makeed file?
    new_f = bool(1)
    print('my_read_list fail out')
else:
    new_f = bool(0)
    fail_new_f() #file?
    new_f = bool(1)
    print('my_read_list')

print(my_list_in) # new file?
if len(my_list_in) <= 6 and new_f == bool(1) and test_bol==bool(1):
    print('my_read_list')
    print(my_list_in)
    my_list_in.append('6') 
    new_f = bool(1)   
    fail_new_f()

print(my_list_in)

exit()

自分で試したこと

while line and line != re.mach(r'[\x04]$',line) #[\x04] \x04|$
どうやらline = f.readline()内で\x04は消されているので意味がないのでは?と思い付きました。

したいことは、['1','','3','4','5','6']と出す事。
よろしくお願いいたします。

        if  new_f == bool(0) and myx==1:
            print('in Line')
            my_f_bol = bool(0)
            with open(data_file_name, 'r') as f:
                line = f.readline() 
                if line==re.match(r'[\n]',line):
                    print('it test')
                    my_f_bol = bool(1)
                else:
                    my_f_bol = bool(0)  
                print(line.rstrip("\n"),' 1st') #print? 1st print out
                line = re.sub(r'\n', '', line)
                while line or my_f_bol==(1):# and 'x04|$==True が欲しい
                    print('it test')
                    print(line.rstrip("\n")) 
                 #  line = line.rstrip("\n") 
                    line = re.sub(r'\n', '', line)
                    if my_f_bol==bool(1):
                        my_list_in.append('a')
                        print('a inL')
                    else:
                        my_list_in.append(line)
                    print(line,' inL')
                
                    line = f.readline()
                    if line==re.match(r'[\n]',line):
                        print('it test2')
                        my_f_bol = bool(1)
                    else:
                        my_f_bol = bool(0)
                    line = re.sub(r'\n', '', line)                

                    n+=1
                    if n>10:
                        break
                print('while end')

空なのか改行を取って空になったのか調べました。

0

1Answer

line==''の場合は、whileから抜けてしまいます。
よって、(先頭のコードに対して)以下の変更でどうでしょうか。

        if  new_f == bool(0) and myx==1:
            print('in Line')
            with open(data_file_name, 'r') as f:
                line = f.readline()
                print(line.rstrip("\n"),' 1st') #print? 1st print out
-               line = re.sub(r'\n', '', line)
+               #line = re.sub(r'\n', '', line)
                while line:# and 'x04|$==True が欲しい
+                   line = re.sub(r'\n', '', line)
                    print('it test')
                    print(line.rstrip("\n"))
                 #  line = line.rstrip("\n")
                    line = re.sub(r'\n', '', line)
                    my_list_in.append(line)
                    print(line,' inL')

                    line = f.readline()
-                   line = re.sub(r'\n', '', line)
+                   #line = re.sub(r'\n', '', line)
0Like

Comments

  1. @tattyan3

    Questioner

    Clear code

    import os
    import sys
    import re
    # ファイル名
    data_file_name = 'my_test.txt'
    # ファイルが存在するか確認
    new_f=bool(0)
    
    test_bol=bool(1)#test=1
     
    my_list_in = []
    
    def fail_new_f():
        myx=1
        if os.path.exists(data_file_name):
        #fileがあれば読み込む
            global new_f
            global test_bol
            global my_list_in
            n=0
            if  new_f == bool(0) and myx==1:
                print('in Line')
                my_f_bol = bool(0)
            #    s = "open(\"my_test.txt\" \'r\')" #in the "\n"only line.
            #    s.sort()
                f = open(data_file_name, 'r')#ファイル読み込み
                str = f.read()
                print(str)
                f.close()
                myn = str.count('\n')
                if myn==0:
                    my_f_bol = bool(1)
                else:
                    my_f_bol = bool(0)
                print('myn',myn,'my_f_bol',my_f_bol)
            
                with open(data_file_name, 'r') as f:
                    line = f.readline() 
                    if line==re.match(r'[\n]',line):
                        print('it test')
                        my_f_bol = bool(1)
                    else:
                        my_f_bol = bool(0)  
                    print(line.rstrip("\n"),' 1st') #print? 1st print out
                    line = re.sub(r'\n', '', line)
                    while line or my_f_bol==(1) or n<myn:# and 'x04|$==True が欲しい
                        print('it test')#this test out
                        print(line.rstrip("\n")) 
                     #  line = line.rstrip("\n") 
                        line = re.sub(r'\n', '', line)
                        if my_f_bol==bool(1):
                            my_list_in.append('a')
                            print('a inL')
                        else:
                            my_list_in.append(line)
                        print(line,' inL')
                    
                        line = f.readline()
                        if line==re.match(r'[\n]',line):
                            print('it test2')
                            my_f_bol = bool(1)
                        else:
                            my_f_bol = bool(0)
                        line = re.sub(r'\n', '', line)                
    
                        n+=1
                        if n>10:
                            break
                    print('while end')
            if new_f==bool(1):
                with open(data_file_name, 'w') as f:
                    for item in my_list_in:
                        f.write(item + '\n')
                
            new_f = bool(1)
        else:
        #fileがなければ作成
            my_list_in = ['1', '2', '3', '4', '5']  
            with open(data_file_name, 'w') as f:
                for item in my_list_in:
                    f.write(item + '\n')
            print('white end')       
    
    if not os.path.exists(data_file_name):
        new_f = bool(0)
        fail_new_f() #makeed file?
        new_f = bool(1)
        print('my_read_list fail out')
    else:
        new_f = bool(0)
        fail_new_f() #file?
        new_f = bool(1)
        print('my_read_list')
    
    print(my_list_in) # new file?
    if len(my_list_in) <= 6 and new_f == bool(1) and test_bol==bool(1):
        print('my_read_list')
        print(my_list_in)
        my_list_in.append('6') 
        new_f = bool(1)   
        fail_new_f()
    
    print(my_list_in)
    
    exit()
    
  2. @tattyan3

    Questioner

    また、読み込みなら、

                f = open(data_file_name, 'r')#ファイル読み込み
                str = f.read()
                my_list_in2=str.split("\n")
                print('anser1')
                print(my_list_in2)
                f.close()
    

    だけで、十分でした。

Your answer might help someone💌