Использование «split» с разделителем для нескольких целей - PullRequest
0 голосов
/ 12 мая 2018

Итак, у меня есть файл CSV в базе данных фильмов, и я читаю это в массив.Мне нужно разделить каждую часть массива на другой массив или, по крайней мере, сделать его доступным для манипулирования.

Вот пример файла csv:

adult,belongs_to_collection,budget,genres,homepage,id,imdb_id,original_language,original_title,overview,popularity,poster_path,production_companies,production_countries,release_date,revenue,runtime,spoken_languages,status,tagline,title,video,vote_average,vote_count

ПримерФактический кортеж

False,"{'id': 10194, 'name': 'Toy Story Collection', 'poster_path': '/7G9915LfUQ2lVfwMEEhDsn3kT4B.jpg', 'backdrop_path': '/9FBwqcd9IRruEDUrTdcaafOMKUq.jpg'}",30000000,"[{'id': 16, 'name': 'Animation'}, {'id': 35, 'name': 'Comedy'}, {'id': 10751, 'name': 'Family'}]",http://toystory.disney.com/toy-story,862,tt0114709,en,Toy Story,"Led by Woody, Andy's toys live happily in his room until Andy's birthday brings Buzz Lightyear onto the scene. Afraid of losing his place in Andy's heart, Woody plots against Buzz. But when circumstances separate Buzz and Woody from their owner, the duo eventually learns to put aside their differences.",21.946943,/rhIRbceoE9lR4veEXuwCC2wARtG.jpg,"[{'name': 'Pixar Animation Studios', 'id': 3}]","[{'iso_3166_1': 'US', 'name': 'United States of America'}]",1995-10-30,373554033,81.0,"[{'iso_639_1': 'en', 'name': 'English'}]",Released,,Toy Story,False,7.7,5415 

Вот мой код:

open (NAMEFILE, "movies_metadata.csv");
my @topgrossmovie = <NAMEFILE>;
close NAMEFILE;

foreach $x ( @topgrossmovie ) {
    my ($adult,$belongs_to_collection,$budget,$genres,$homepage,$id,$imdb_id,$original_language,$original_title,$overview,$popularity,$poster_path,$production_companies,$production_countries,$release_date,$revenue,$runtime,$spoken_languages,$status,$tagline,$title,$video,$vote_average,$vote_count) = split /,/, $x;
}

Из-за того, что они являются запятой , внутри кортежей, это чрезвычайно затрудняет работу.

1 Ответ

0 голосов
/ 13 мая 2018

Не пытайтесь изобретать велосипед.Используйте существующий синтаксический анализатор, такой как Text :: CSV_XS .

Если вам нужно извлечь данные из JSON-подобных строк (как только вы извлечете их из CSV), вы можетевозможность использовать JSON :: PP с ->allow_singlequote(1).(Обратите внимание, что более быстрая JSON :: XS не поддерживает эту опцию.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...