【问题标题】:Apply function to URL and write in new column in CSV将函数应用于 URL 并在 CSV 中写入新列
【发布时间】:2017-07-18 01:03:55
【问题描述】:

我是新手,很惊讶没有与我所问的类似的明确答案,如果这是重复的,请道歉。

我在尝试缩短的 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)

编辑: 我不断收到错误“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

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

【问题讨论】:

  • row 是一个列表,每列都有一个值。如果您的文件只有 1 列,则它是一个 1 元素列表,row[0] 是 url。
  • @9000,感谢您的提示,我更新了代码,但仍然遇到问题。
  • Edit 你的问题并显示print(row)

标签: python csv for-loop


【解决方案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,然后根据索引与原始 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')

【讨论】:

  • 我尝试了您的代码并将 'my_date' 更改为 'my_data',但不断收到错误消息:“AttributeError: '_csv.reader' object has no attributre 'iterrows'” - 也许我在做有事吗?我喜欢在 Pandas 中加入它的想法,在那里我可以写入 CSV。重要的是我保持原来的顺序。谢谢你,我
  • @SDS 你又犯了一个错误。而不是 csv_reader 使用 pd.read_csv(file_name)
  • @SDS 您现在可以检查答案的最新编辑。或者,您可以使用 pd.read_excel 而不是 pd.read_csv
【解决方案2】:

首先尝试这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2018-10-11
    • 2020-02-13
    相关资源
    最近更新 更多