2017-07-18 6 views
0

私は初心者であり、私が尋ねているのと同じような明確な答えはすでにありません。URLに関数を適用し、CSVの新しい列に書き込む

私は短縮しようとしているCSVファイルのURLのリストを持っています。私はCSVファイルをループし、元のURLのすぐ隣に短縮URLを付けて新しい列を書きたいと思います。

from pyshorteners import Shortener 
import csv 

def generate_short(url): 
    x = shortener.short(url) 
    return x 
with open('Links_Test.csv') as csvfile: 
    my_date = csv.reader(csvfile, dialect = 'excel') 
    for row in my_data: 
     x = shortener.short(row) 
     print(X) 

EDIT: は、私はエラーになっておく「とValueErrorは:有効なURLを入力してください」と、ここから続行する方法がわからない.....私は問題だと確信しています。

URL 
http://www.google.com 
http://www.facebook.com 
http://www.twitter.com 
http://www.linkedin.com 

、ここで私は私の出力が見えるようにしたいものです:ここで

は私の入力データは次のようになります

URL      Short_URL 
http://www.google.com  http://goo.gle 
http://www.facebook.com http://goo.g3c 
http://www.twitter.com  http://goo.g3a 
http://www.linkedin.com http://goo.g2q 

はあなたの助けをいただき、ありがとうございます。私は非常に驚いていますが、これは重複している場合はごめんなさい(少なくとも私はそれを見つけることができなかった)明確な答えが投稿されていない。

+0

となる可能性があります。 'row'はすべての列の値を持つリストです。あなたのファイルが1列のみの場合、それは1要素のリストで、 'row [0]'はURLです。 – 9000

+0

@ 9000、チップのおかげで、私は自分のコードを更新しましたが、まだ問題があります。 – SDS

+0

あなたの質問を[編集]し、 'print(row)'を表示してください。 – stovfl

答えて

1

データフレームに変換し、また、あなたは常に別のリストに短縮URLを保存することができた場合はmy_data

from pyshorteners import Shortener 
import pandas as pd 

def generate_short(url): 
    x = shortener.short(url) 
    return x 
    my_date = pd.read_csv('Link-Tests.csv', sep = "\t") #seperator argument is optional. It can be a semi colon, a tab. Check your CSV file for knowing what the separator is. 
    for index,row in my_data.iterrows(): 
     x = shortener.short(row[0]) 
     print(X) 

my_data.iterrows()ないでそれを適用する必要がrow[0]またはrow['URL'] に関数を適用し、インデックスに基づいて元のデータフレームとマージします。

lst = [] 
my_date = pd.read_csv('Link-Tests.csv', sep = "\t") 
    for index,row in my_data.iterrows(): 
     x = shortener.short(row[0]) 
     lst.append(X) 
df = pd.DataFrame(lst, columns=["Short-Url"]) 
my_data = my_data.join(df, how= 'outer') 
+0

私はあなたのコードを試して、 'my_data'を 'my_data'に変更しましたが、エラーが続いています: "AttributeError: '_csv.reader'オブジェクトの属性が 'iterrows'ではありません。私はCSVに書き込むことができるPandasでそれを元に戻す考えが好きです。私はこのために元の順序を維持することが重要です。ありがとう、私は – SDS

+0

@SDSあなたは別のミスをしました。 csv_readerの代わりにpd.read_csv(file_name) – Djokester

+0

@SDSを使用すると、最新の回答を確認できます。あるいは、 'pd.read_csv'の代わりに' pd.read_excel'を使うこともできます。 – Djokester

0

最初にこれをやってみてください:

from pyshorteners import Shortener 
import csv 

def generate_short(url): 
    x = shortener.short(url) 
    return x 
with open('Links_Test.csv') as csvfile: 
    my_data = csv.reader(csvfile, dialect = 'excel') 
    for row in my_data: 
     print(row) # output: ['URL'], ['google.com']... 

はおそらくヘッダを無視するnext()を使用するか、多分this threadを見てみたいです。また、おそらくrow[0]を使用して、リストの最初の項目を取得することもできます。最終的なコードは

from pyshorteners import Shortener 
import csv 

def generate_short(url): 
    x = shortener.short(url) 
    return x 
with open('Links_Test.csv') as csvfile: 
    next(csvfile) # skip the header row 
    my_data = csv.reader(csvfile, dialect = 'excel') 
    for row in my_data: 
     print(row[0]) # output: 'google.com' .... 
     # do the link shortener stuff here 
関連する問題