将功能应用于网址并在CSV

时间:2017-07-18 01:03:55

标签: python csv for-loop

我是一个新手并且感到惊讶的是,我已经没有一个类似于我所要求的明确答案,如果这是重复的话,我会道歉。

我有一个CSV文件中的网址列表我试图缩短,我想循环访问我的CSV文件,然后在原始网址旁边写一个带有缩短网址的新列。

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)

编辑: 我一直收到错误“ValueError:请输入一个有效的网址”,不知道如何从这里开始.....我确定我是问题所在。

以下是我的输入数据:

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

感谢您的帮助。我很惊讶没有发布明确的答案(至少我找不到)所以如果这是重复的话,我很抱歉。

2 个答案:

答案 0 :(得分:1)

row[0]row['URL']上应用该功能 此外,您必须在my_data.iterrows()而不是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)

如果您始终可以将缩短的URL存储到单独的列表中,请将其转换为DataFrame,然后根据索引与原始数据框合并。

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')

答案 1 :(得分: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