2013-06-26 4 views
10

Я пытаюсь получить эту колонку слов в input.txt:список Преобразовать в нижний регистр

Suzuki music 
Chinese music 
Conservatory 
Blue grass 
Rock n roll 
Rhythm 
Composition 
Contra 
Instruments 

в этот формат:

"suzuki music", "chinese music", "conservatory music", "blue grass", "rock n roll", "rhythm"... 

Этот код:

with open ('artsplus_stuff.txt', 'r') as f: 
    list.append(", ".join(['%s' % row for row in f.read().splitlines()])) 
    for item in list: 
     item.lower() 

print list 

возвращает список, но первые буквы капитализируются.

[ 'Suzuki музыка, китайская музыка, консерватория, мятлик, Рок-н-ролл, ритм, композиция, Contra, инструменты']

Как получить все элементы в нижнем регистре?

Спасибо!


Ответ не работает в этом списке:

Chess 
Guitar 
Woodworking 
Gardening 
Car_restoration 
Metalworking 
Marksman 
Camping 
Backpacking_(wilderness) 
Hunting 
Fishing 
Whittling 
Geocaching 
Sports 
Model_Building 
Leatherworking 
Bowling 
Archery 
Hiking 
Connoisseur 
Photography 
Pool_(cue_sports) 
Mountaineering 
Cooking 
Blacksmith 
Aviator 
Magic_(illusion) 
Foreign_language 
Card_game 
Blog 
Paintball 
Fencing 
Brewing 
Amateur_Astronomy 
Genealogy 
Adventure_racing 
Knitting 
Computer_Programming 
Amateur_radio 
Audiophile 
Baking 
Bboying 
Baton_twirling 
Chainmail 
Constructed_language 
Coloring 
Crocheting 
Creative_writing 
Drawing 
Fantasy_Football 
Fishkeeping 
Home_automation 
Home_Movies 
Jewelry 
Knapping 
Lapidary_club 
Locksport 
Musical_Instruments 
Painting 
RC_cars 
Scrapbooking 
Sculpting 
Sewing 
Singing 
Writing 
Air_sports 
Boardsport 
Backpacking 
Bonsai 
Canoeing 
Cycling 
Driving 
Freerunning 
Jogging 
Kayaking 
Motor_sports 
Mountain_biking 
Machining 
Parkour 
Rock_climbing 
Running 
Sailing 
Sand_castle 
Sculling 
Rowing_(sport) 
Human_swimming 
Tai_Chi 
Vehicle_restoration 
Water_sports 
Antiques 
Coin_collecting 
Element_collecting 
Stamp_collecting 
Vintage_car 
Vintage_clothing 
Record_Collecting 
Antiquities 
Car_audio 
Fossil_collecting 
Insect_collecting 
Leaf 
Metal_detectorist 
Mineral_collecting 
Petal 
Rock_(geology) 
Seaglass 
Seashell 
Boxing 
Combination_puzzle 
Contract_Bridge 
Cue_sports 
Darts 
Table_football 
Team_Handball 
Airsoft 
American_football 
Association_football 
Auto_racing 
Badminton 
Climbing 
Cricket 
Disc_golf 
Figure_skating 
Footbag 
Kart_racing 
Plank_(exercise) 
Racquetball 
Rugby_league 
Table_tennis 
Microscopy 
Reading_(process) 
Shortwave_listening 
Videophile 
Aircraft_spotting 
Amateur_geology 
Birdwatching 
Bus_spotting 
Gongoozler 
Meteorology 
Travel 
Board_game 
Airbrush 
Advocacy 
Acting 
model_aircraft 
Pets 
Aquarium 
Astrology 
Astronomy 
Backgammon 
Base_Jumping 
Sun_tanning 
Beachcombing 
Beadwork 
Beatboxing 
Campanology 
Belly_dance 
cycle_Polo 
Bicycle_motocross 
Boating 
Boomerang 
Volunteering 
Carpentry 
Butterfly_Watching 
Button_Collecting 
Cake_Decorating 
Calligraphy 
Candle 
Cartoonist 
Casino 
Cave_Diving 
Ceramic 
Church 
Cigar_Smoking 
Cloud_Watching 
Antique 
Hat 
album 
Gramophone_record 
trading_card 
Musical_composition 
Worldbuilding 
Cosplay 
Craft 
Cross-Stitch 
Crossword_Puzzle 
Diecast 
Digital_Photography 
Dodgeball 
Doll 
Dominoes 
Dumpster_Diving 
restaurant 
education 
Electronics 
Embroidery 
Entertainment 
physical_exercise 
Falconry 
List_of_fastest_production_cars 
Felt 
Poi_(performance_art) 
Floorball 
Floristry 
Fly_Tying 
off-roading 
ultimate_(sport) 
Game 
Garage_sale 
Ghost_Hunting 
Glowsticking 
Gunsmith 
Gyotaku 
Handwriting 
Hang_gliding 
Herping 
HomeBrewing 
Home_Repair 
Home_Theater 
Hot_air_ballooning 
Hula_Hoop 
Ice_skating 
Impersonator 
Internet 
Invention 
Jewellery 
Jigsaw_Puzzle 
Juggling 
diary 
skipping_rope 
amateur_Chemistry 
Kite 
snowkiting 
knot 
Laser 
Lawn_Dart 
poker 
Leather_crafting 
Lego 
Macramé 
Model_Car 
Matchstick_Model 
Meditation 
Metal_Detector 
Rail_transport_modelling 
Model_Rocket 
ship_model 
scale_model 
Motorcycle 
Needlepoint 
Origami 
Papermaking 
Papier-mâché 
Parachuting 
Paragliding 
Pinochle 
Pipe_Smoking 
Pottery 
Powerbocking 
Demonstration_(people) 
Puppetry 
Pyrotechnics 
Quilting 
pigeon_racing 
Rafting 
Railfan 
Rapping 
remote_control 
Relaxation 
Renaissance_Fair 
Renting_movies 
Robotics 
Rock_Balancing 
Role-playing 
sand_art_and_play 
Scuba_Diving 
Self-Defense 
Skeet_Shooting 
Skiing 
Shopping 
choir 
Skateboarding 
Sketch_(drawing) 
SlackLining 
Sleep 
Slingshot 
Slot_Car_Racing 
Snorkeling 
Soap 
Rubik's_Cube 
caving 
Family 
Storm_Chasing 
Storytelling 
String_Figure 
Surf_Fishing 
Survival_skills 
Tatting 
Taxidermy 
Tea_Tasting 
Tesla_Coil 
Tetris 
Textile 
stone_Rubbing 
Antique_tool 
Toy 
Treasure_Hunting 
Trekkie 
tutoring 
Urban_Exploration 
Video_Game 
Violin 
Volunteer 
Walking 
Weightlifting 
Windsurfing 
WineMaking 
Wrestling 
Zip-line 
traveling 

ошибки: list.append ("" .join ([ ' "% s"' % строк для строки в f.read() .splitlines()])) TypeError: дескриптор 'добавить' требуется 'список' объект, но получил 'ул' логаута

+7

Строки неизменяемы в Python. – squiguy

+3

... и потому, что они неизменны, вы «уменьшаете» копию * данной строки. – Crisfole

+5

Это обязательное «не называть переменную' list', потому что комментарий «list' является встроенным в python». – SethMMorton

ответ

35

Вместо

for item in list: 
    item.lower() 

измените имя переменной list на l или что вам понравится не зарезервированное слово в Python и используйте следующую строку, очевидно, заменяя все, что вы называете списком для l.

l = [item.lower() for item in l] 

lower метод возвращает копию строки во всех строчных букв. Как только строка была создана, ничто не может изменить ее содержимое, поэтому вам нужно создать новую строку с тем, что вы хотите в ней.

+9

И не используйте имя переменной 'list'. – arshajii

8

Вот как это можно сделать:

In [6]: l = ['Suzuki music', 'Chinese music', 'Conservatory', 'Blue grass'] 

In [7]: map(str.lower, l) 
Out[7]: ['suzuki music', 'chinese music', 'conservatory', 'blue grass'] 

Одна из причин, что ваш код не так, как ожидалось, что item.lower() не изменяет строку (в Python, строки являются неизменными). Вместо этого он возвращает строчную версию строки, которую ваш код игнорирует.

+0

Yay для функционального программирования. – squiguy

+5

Учитывая, что проблема афера заключалась в том, что он выполнял операцию, которую он интуитивно ожидал, чтобы изменить список на месте, но на самом деле не был, давая в качестве ответа * другую операцию, которая не изменяет список на месте * и не объясняет ему его ошибка кажется довольно бесполезным ответом. –

2

Самый простой может быть список понимание:

with open('./input.txt', 'r') as f: 
    results = [ line.strip().lower() for line in f if line] 

... Я предполагаю, что вы готовы раздеться все начальные и конечные пробелы из каждой строки; хотя вы могли бы использовать только .rstrip() или даже .rstrip('\n'), чтобы быть более конкретным в этом. (Один из них сохранил бы любые пробелы слева от каждой строки, а другой разделил бы только линии новой строки с концов линий.

Также это будет отфильтровывать любые пустые строки, включая пустую строку терминала, которая является почти всегда находится в конце текстового файла.(Этот код будет работать даже с редким текстовым файлом, который не заканчивается новой строкой).

+1

Полный ответ. Ты качаешь Денниса! –

1

Для тех, кто любит временные испытания

In [1]: %timeit [c.lower() for c in l] 
1000000 loops, best of 3: 866 ns per loop 

In [2]: %timeit map(str.lower, l) 
1000000 loops, best of 3: 1.01 µs per loop 

In [3]: %timeit map(lambda x:x.lower(), l) 
1000000 loops, best of 3: 1.41 µs per loop 
0

В строках Python неизменны. Что в Сэме Хилле это означает. Это означает, что строки не могут быть изменены. Однако их можно заменить. Аналогия должна была заменить ваш автомобиль. Ваш автомобиль является строковой переменной. Вы не можете изменить свой VW Bug на Lexus, но вы можете его заменить, купив Lexus. Но я не хочу двух автомобилей! Я хочу заменить VW Bug и уйти, оставив только мою дорогу. Другими словами. Я бы предпочел не добавлять другую переменную в свой сценарий Python. Но это только я.

И я проехал Ошибка. Это было весело!

myList = ["Suzuki music", "Chinese music", "Conservatory music", "Blue grass", "Rock n roll", "Rhythm"] 

for i in range(0, len(myList)): 
    myList[i] = myList[i].lower() 

for item in myList: 
    print item