質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

606閲覧

url存在チェックの結果をCSV に書き出したい

c-man

総合スコア5

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/02/21 03:23

編集2023/02/21 04:20

実現したいこと

  • original.csvに記載されている各URLからURLの存在チェックをおこなう
  • チェックの結果をoriginal.csvのとなりの列に書き出しを行いたい

該当のソースコード

import urllib.request, urllib.error def checkURL(url): try: f = urllib.request.urlopen(url) print ("OK:" + url ) f.close() except: print ("NotFound:" + url) if __name__ == '__main__': with open('C:\\Users\\original.csv') as f: for line in f: # print(line, end='') checkURL(line)

試したこと

以下のようにcsvに書き出しできないかと試したのですが期待通りには書き出しされました。
エラー:UnsupportedOperation: not readable

import urllib.request, urllib.error def checkURL(url): try: f = urllib.request.urlopen(url) print ("OK:" + url ) f.close() except: print ("NotFound:" + url) if __name__ == '__main__': with open('C:\\Users\\original.csv','a', encoding='utf-8',newline='') as f: writer = csv.writer(f) for line in f: # print(line, end='') checkURL(line) row = [url,checkURL(line)] writer.writerow(row)

実現方法のヒントをいただければと思います。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/02/21 03:41

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
y_waiwai

2023/02/21 03:43

んで、提示のコードではどういう動作となるんでしょうか。 そして、それをどう言う風にしたいのか説明しよう
c-man

2023/02/21 03:50

すみません。更新しました。 上のコードでは結果が出力はしました。 下のコードで出力したコードをCSVに書き出しを行いたいのですがエラーになる状態です。 エラー:UnsupportedOperation: not readable
n24bass

2023/02/21 04:20

別ファイルに書き出してからリネームとか。
guest

回答4

0

2つめのコード:

with open('C:\Users\original.csv','a', encoding='utf-8',newline='') as f:

と、書き込み用のオープンをしているにもかかわらず、

for line in f:

で読み込みが発生するので、「書き込みオープンしたファイルから読もうとしている」というエラーです。

別のファイルに書くというのが簡明かと思います。

投稿2023/02/21 04:17

otn

総合スコア84529

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

checkURL関数は値を返してません。
ちゃんとあなたの思うような値を返すようにしましょう

row = [url,checkURL(check)]

そのうえ、どこにも定義されてないcheckってのを使ってますね

投稿2023/02/21 04:07

編集2023/02/21 04:08
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

c-man

2023/02/21 04:15 編集

コメントありがとうございます。 checkは別で試したときに使用したものが残ってしまっていました。 以下のように修正してみたのですが変化がなかったです。 row = [url,checkURL(line)]
y_waiwai

2023/02/21 04:17

checkURL関数は値を返してません。 返してないのに、関数の返り値を使おうとしているので、 ちょっとそれはおかしいなやいんか?とPCさんが怒ってらっしゃいます
guest

0

たくさんのコメントありがとうございました。
以下のようにして実現が可能となりました。

HEADER = ['OriginUrl','url_link'] def checkURL(url): try: f = urllib.request.urlopen(url) f.close() return ("OK") except: return ("NotFound") if __name__ == '__main__': with open('C:\\Users\\original.csv', encoding='utf-8') as f: with open('C:\\Users\\original.csv'01','a', encoding='utf-8',newline='') as f0: writer = csv.writer(f0) writer.writerow(HEADER) for line in f: # print(line, end='') print(line) print(checkURL(line)) row = [line,checkURL(line)] writer.writerow(row)

投稿2023/02/21 05:52

c-man

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

コードには問題が2つあります。

  1. 読み込み用に開いたファイルに書き込もうとしている。
    そもそも、読んでいる最中のファイルに、何かをうまく書き込むのは難しい処理です。Excelなどはそうしているように思うかもしれませんが、実は裏では違うこと(別のファイルに書いて置き換える)をしています。
    なので、別の回答にもあるとおり、結果は違うファイルに書き出し、必要であれば元のファイルと置き換えるようにするのがいいでしょう。

  2. 関数の計算結果の扱いが間違えている
    「row = [url,checkURL(line)]」と書けば、checkURL()関数の処理結果がここに入ると考えているのだと思います。 ここで、その結果とは何なのかが問題です。
    checkURL() 関数を実行するこ結果が画面に出力されますが、これは、よくプログラミングでは副作用と呼ばれるもので、 プログラム上の関数の実行結果ではないので「row = [url,checkURL(line)]」このリストには入らなのです。
    関数の実行結果をプログラム内で受け取るためには、関数はその結果を返す(returnする)必要があります。

python

1def checkURL(url): 2 try: 3 f = urllib.request.urlopen(url) 4 f.close() 5 return ("OK:" + url ) 6 except: 7 return ("NotFound:" + url)

投稿2023/02/21 04:51

TakaiY

総合スコア12763

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問