将函数应用于URL并在CSV中写入新列

2024-04-25 14:52:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新手,很惊讶已经没有一个明确的答案类似于我所问的,道歉,如果这是一个重复。你知道吗

我有一个列表的网址在一个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:Please enter a valid 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

谢谢你的帮助。我很惊讶还没有一个明确的答案张贴(至少我找不到),所以我很抱歉,如果这是一个重复。你知道吗


Tags: 文件csvcsvfile答案importcomhttpurl
2条回答

将函数应用于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存储到单独的列表中,请将其转换为数据帧,然后基于索引与原始数据帧合并。你知道吗

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

首先尝试这样做:

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

相关问题 更多 >