• ベストアンサー

エラーの原因が分からず困ってます。

下記のmatchのところで、エラー(TypeError: expected string or bytes-like object)が出て原因が分からず困ってます。 'ファイルをオープン' with open(target_file) as f: lines = f.readlines() '改行を削除' lines_strip = [line.strip() for line in lines] print(lines_strip)  keyword = input()  match = re.findall(keyword,lines_strip)

  • Python
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8012/17125)
回答No.3

原因は TypeError: expected string or bytes-like object の通りであってlines_stripが期待されている型になっていないのです。 例えば,途中に lines_strip = "".join(lines_strip) を入れてください。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.2

>一応、re.findall()の第2引数は、["","Ab","Bc","Cd","De","Ef","Fg","Gh","Hi","Ij","Jk"]といった形式にしています。 その型は文字列(str)やバイト列(bytes)ですか。 (文字列やバイト列か、というのは適当に書いているわけではなく、質問に書かれている"TypeError: expected string or bytes-like object”から読み取っているだけです) >こんなに早く来ると思ってませんでした。。 たまたまです。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.1

re.findall()の第2引数は文字列かバイト列が要求されていますが、lines_stripの値はそれらに該当していますか。 (第1引数のkeywordの値がエラーの原因という可能性もありますが質問に書かれている内容からは判断できないので保留しています)

the-man
質問者

補足

早速のご回答ありがとうございます。 こんなに早く来ると思ってませんでした。。 一応、re.findall()の第2引数は、["","Ab","Bc","Cd","De","Ef","Fg","Gh","Hi","Ij","Jk"]といった形式にしています。 またkeywordは、""内に該当する文字を入力しています。

関連するQ&A

  • 行き詰ってます。。

    'ファイルをオープン' with open(target_file) as f: lines = f.readlines() '改行を削除' lines_strip = [line.strip() for line in lines] lines_strip = "".join(lines_strip) '検索' keyword = input() position = lines_strip.find(keyword) #ここで、keywordと一致する文字の場所が分かる。 ここからですが、その後、A xxx A ddd A ccc A vvv B zzz と続きます。 ※実現したいこと。 A xxx A ddd A ccc A vvv B zzz Bを検出したら終わり。というプログラムを記載したいのですが、 どのように書けばよいでしょうか?

  • さっぱり分からず困ってます。。

    読み込むテキストファイルは下記のとおりです。 <100>  A xxx  A ddd  A ccc  A vvv  B zzz //200//  A xx1  A dd1  A cc1  A vv1  A zz1 ・300  A 3xx  A 3dd  A 3cc  A 3vv  A 3zz 上記のテキストファイルから、100,200,300のキーワードで該当箇所から 次行を表示するプログラムを考えています。 下記のプログラムで実行すると、取得できるのですが、何度も繰り返し出力します。 1回で良いのですが、何度も繰り返す処理を記載しているつもりが無いのに、何故繰り返すのか意味不明で困ってます。 どうすれば、修正できるでしょうか。。 import re def extract_text_in_file(filepath, pattern_prev, pattern_next): '空のリスト生成' extracted_text_array = [] '抽出したい範囲' pattern = pattern_prev + '(.*)' + pattern_next 'ファイルオープン' with open(filepath) as f: lines = f.readlines() '改行削除、文字列に変換' lines_strip = [line.strip() for line in lines] lines_strip = "".join(lines_strip) '文字列lines_stripから抽出範囲を取得し、リストに追加' for i in lines_strip: tmp_extracted_text_array = re.findall(pattern, lines_strip) extracted_text_array.extend(tmp_extracted_text_array) return extracted_text_array path = 'C:\\Users' file_name = '/' + '***.txt' target = path + file_name pa_prev = '100' pa_next = 'B' x = extract_text_in_file(target,pa_prev,pa_next) print(x)

  • [python] 関数から配列を戻すには?

    グローバル変数(配列)の値を変えたいと思います。 ------------- line = [] def tmp_read(self, *out_line): f = open('tmp.txt') lines2 = f.readlines() # 1行毎にファイル終端まで全て読む(改行文字も含まれる) f.close() # lines2: リスト。要素は1行の文字列データ for line in lines2: print line, print *out_line = lines2 return *out_line tmp_read(self, *line) print line     ← 配列Lineの内容を確認する ------------- この「line」には、文字列を含む配列を入れる予定です。 lines2で得られた値を、戻せば出来そうな気もしますが巧くいきません。 どのように修正すれば酔いか、教えて頂けませんか。

  • Perlでテキストファイルの処理方法

    Perlでファイル入力は 下記のように記述します open (IN,"myInput.txt"); $lineno = -1; while (<IN>) {  $lineno = $lineno + 1;  @lines_org[$lineno] = $_;  #print lines_org[$lineno];  #print $_,"\n";  } これで一行づつ入力できます ここで質問したいのは 入力ファイルに改行コードがないため 処理できないと思うのですが 一行づつ入力ではなく、1文字づつ入力する 入力方法はPerlにはないのでしょうか ちなみに入力ファイルは数メガある大きなファイル です よろしくおねがいします

    • ベストアンサー
    • Perl
  • CGIで取得したログの改行と表示したときの修飾方法

    HTMLで入力した項目を下記のCGIのファイルオープンでテキストとしてデータを取りますが、追加するように指定しているので1回目の入力の後、改行して2回目の入力をしたく、最後に\nをつけています。自分のPCをウェブサーバーにして実行すれば改行されましたがプロバイダーに載せると改行しませんでした、どなたかご教授をお願いします。また、このテキストファイルを(2)のようにして他のサイトで表示しようと考えていますがこのファイルに書かれた文字のフォントなど修飾するにはどのようにするのでしょうか? ちなみにHTML&CGI歴14日ぐらいですので、厚かましいのですが分かりやすくお願いいたします。 { # ファイルに保存 open (FH,">>file1-$number.txt");# 上書きモードでオープン $line=<FH>; @filew=("$name, $object,$time,$reason\n"); print FH @filew; close(FH); exit; } (2)<IFRAME src="cgi-bin/file1-1.txt"

    • 締切済み
    • CGI
  • プログラミングについて教えてください!

    rubyについてのプログラムで、テキストファイルの中に人の名前と住所が書かれていて、その人の住所が登録されていると、その人の住所が表示され、なければnilを返すプログラムを作りたいと思っていて、 def (search)から後をどう書いたらいいのかわからないので、是非教えていただきたいのでお願いします! class AddressFile def Initialize(file) @original = file @meibo = {} fo = open(file,"r") lines = fo.readlines fo.close for aLine in lines data = aLine.split @meibo[data[0]] =data[1] end end attr_accessor :meibo end def search(name) end end obj = AddressFile.new("address_list.txt") obj.search(○○○○) テキストファイルの中身は、名前、住所の順番で入っています。このプログラムでおかしいとこがあれば、それも教えていただきたいです! よろしく、お願いします!

    • ベストアンサー
    • Ruby
  • エラーで起動できません

    バトルフィールド2というPCオンラインゲームのリナックスサーバーをインストールまではできたのですが、いざサーバー起動!!というときに $ cd /bf2server/bf2 $ ./start.sh コマンドと打ち込むと f: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory とエラーが出て起動できません。 libstdc++.so.5が入ってないのかな? この場合どうすればいいでしょうか? OSはFedora Core3をインストールしたてです。

  • definedの使い方が間違ってますか?

    こんばんは。 色々試してみたのですが、どうしてもうまくいかないので質問させてください。 リストの$f1とファイルの$aaがマッチして、 かつリストの$f3とファイルの$bbがマッチした場合に、 $f4を付け加えてprintしたいのですが、 ★マークの処理で、リストの$f3とファイルの$bbがマッチしていないものまで printされてしまうことがあります。 $aaとマッチするものがリストに2つ以上ある時にこの現象がおきるようなのですが、 どの辺を直したらよいのかわかりません。 definedの使い方がおかしいのでしょうか? 見よう見まねで書いたので、▲マークあたりの指定も自信がありません。 #リスト読み込み open LIST, "./list" or die; while (<LIST>) { chomp; if (/(.*) (.*) (.*) (.*)/) { $f1 = $1; $f2 = $2; $f3 = $3; $f4 = $4; } $xx{$f1} = $f4; #▲ $yy{$f1} = $f3; #▲ } close LIST; #ファイル読み込み if ($#ARGV >= 0) { @files = @ARGV; } foreach $file (@files) { open FILE, $file; while (<FILE>) { chomp; if (/^([^t]+)\t(.*)$/) { $aa = $1; $bb = $2; if (defined($xx{$aa})) { if (defined($yy{$bb})) { # ★ print "$aa\t$bb\t\#【$xx{$aa}】\n"; } } } } close FILE; } どうかご教示お願いいたします。

    • ベストアンサー
    • Perl
  • スペース区切りの絞込検索

    現在CSVファイルを利用した簡易検索を作っています。 他の質問にも似たようながありましたがsqlの知識もなく理解できなかったので新規で質問致しました。 複数のキーワードをどうしてもスペース区切りでの絞込検索ができなく悩んでいます。 大変恐縮ですが、お知恵をお借りできればと思い 書き込みさせていただきました。 現在自分で書いたコードは下記です。 大変お手数ですがお教えいただけると幸いです。 宜しくお願い致します。 <?PHP $KeyWord=$_GET["key"]; $ArrKeyword=explode(" ",$KeyWord); $f = 0; $Data=file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=$Data[$i]; for($n=0;$n<sizeof($ArrKeyword);$n++){ //このあたりが理解できていません・・ if(mb_eregi($ArrKeyword[$n],$line)){ $lines = $line; } $kensaku_kekka[$f] = $lines; $f = $f+1; break; } } print_r($kensaku_kekka); ?>

    • ベストアンサー
    • PHP
  • クラスをシリアライズする(ruby)

     質問はクラスのオブジェクトを、シリアライズしてファイルに保存するプログラムを作成したいのと、シリアライズしたデータベースのオブジェクトを、ファイルから読み込んで復元するプログラムを作成したいと思っています。 そこで、下記のプログラムを使って作りたいのですが、どのように作成したらいいか教えて欲しいです。 是非とも、よろしくお願いします。 class AddressFile def initialize(file) @original = file @meibo = {} fo = open("address_list.txt", "r") lines = fo.readlines fo.close for aLine in lines data = aLine.split @meibo[data[0]] = data[1] end end attr_accessor :meibo def search(name) @meibo[name] end def add(name,address) @meibo[name] = address end def update(name, address) @meibo[name] = address end end 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。 よろしく、お願いします

    • ベストアンサー
    • Ruby

専門家に質問してみよう